注意:
使用CoGetClassObject,通过系统注册表中有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);
注意:
问题:
答案 0 :(得分:3)
这里的问题是你混淆了类对象和对象本身。 CoGetClassObject
将为您提供指向实现IClassFactory
的对象的指针,该对象旨在创建您感兴趣的对象的实例。它不是该对象的实际实例。
在您的示例中,您通过调用IUnknown
指针上的QueryInterface
来获取IClassFactory
指针。此指针仍指向类对象的实例,因此对您感兴趣的接口执行QueryInterface
会导致错误。相反,您需要调用IClassFactory::Createinstance
来获取指向实际对象的IUnknown
指针并在该指针上执行QueryInterface
。
答案 1 :(得分:1)
另外,看看CoCreateInstance函数。