C++ 为什么在创建支持该接口的对象时会得到E_NOINTERFACE?
注意:C++ 为什么在创建支持该接口的对象时会得到E_NOINTERFACE?,c++,windows,visual-studio-2008,com,C++,Windows,Visual Studio 2008,Com,注意: hresult = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); IClassFactory *pIClassFactory; hresult = CoGetClassObject (clsid, CLSCTX_LOCAL_SERVER, NULL, IID_IClassFactory, (LPVOID *)&pIClassFactory); hresult = pIClassFactory->QueryInterf
hresult = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
IClassFactory *pIClassFactory;
hresult = CoGetClassObject (clsid, CLSCTX_LOCAL_SERVER, NULL, IID_IClassFactory, (LPVOID *)&pIClassFactory);
hresult = pIClassFactory->QueryInterface (IID_IUnknown, (LPVOID *)&pUnk);
hresult = pUnk->QueryInterface (__uuidof(IExample), (LPVOID *)&pISimClass);
- 使用,通过系统注册表中有CLSID的类对象创建多个对象
- 单线公寓
hresult = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
IClassFactory *pIClassFactory;
hresult = CoGetClassObject (clsid, CLSCTX_LOCAL_SERVER, NULL, IID_IClassFactory, (LPVOID *)&pIClassFactory);
hresult = pIClassFactory->QueryInterface (IID_IUnknown, (LPVOID *)&pUnk);
hresult = pUnk->QueryInterface (__uuidof(IExample), (LPVOID *)&pISimClass);
注意:
hresult = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
IClassFactory *pIClassFactory;
hresult = CoGetClassObject (clsid, CLSCTX_LOCAL_SERVER, NULL, IID_IClassFactory, (LPVOID *)&pIClassFactory);
hresult = pIClassFactory->QueryInterface (IID_IUnknown, (LPVOID *)&pUnk);
hresult = pUnk->QueryInterface (__uuidof(IExample), (LPVOID *)&pISimClass);
- 返回E_NOINTERFACE
- *ppvObject设置为NULL
hresult = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
IClassFactory *pIClassFactory;
hresult = CoGetClassObject (clsid, CLSCTX_LOCAL_SERVER, NULL, IID_IClassFactory, (LPVOID *)&pIClassFactory);
hresult = pIClassFactory->QueryInterface (IID_IUnknown, (LPVOID *)&pUnk);
hresult = pUnk->QueryInterface (__uuidof(IExample), (LPVOID *)&pISimClass);
- 如果这是问题所在,我如何确认它确实已注册
- 这里的问题是您混淆了类对象和对象本身
CoGetClassObject
将为您提供一个指向对象的指针,该对象实现了IClassFactory
,旨在创建您感兴趣的对象的实例。它不是该对象的实际实例
在您的示例中,通过调用
IClassFactory
指针上的QueryInterface
可以获得IUnknown
指针。该指针仍然指向类对象的实例,因此对您感兴趣的接口执行QueryInterface
会导致错误。相反,您需要调用以获取指向实际对象的IUnknown
指针,并对该指针执行QueryInterface
。这里的问题是您混淆了类对象和对象本身CoGetClassObject
将为您提供一个指向对象的指针,该对象实现了IClassFactory
,旨在创建您感兴趣的对象的实例。它不是该对象的实际实例
在您的示例中,通过调用
IClassFactory
指针上的QueryInterface
可以获得IUnknown
指针。该指针仍然指向类对象的实例,因此对您感兴趣的接口执行QueryInterface
会导致错误。相反,您需要调用以获取指向实际对象的IUnknown
指针,并对该指针执行QueryInterface
。另外,请查看CoCreateInstance函数。另外,请查看CoCreateInstance函数。谢谢-但现在:“此可连接对象不支持指定的传出接口”如果您发布您尝试执行的示例代码,我们可能会提供帮助。谢谢-但是现在:“此可连接对象不支持指定的传出接口”如果您发布您尝试执行的示例代码,我们可能会提供帮助。请投票关闭此发布-因为不再相关。谢谢,请投票结束这篇文章,因为它不再相关了。谢谢