gpt4 book ai didi

c++ - 为什么在创建支持该接口(interface)的对象时得到 E_NOINTERFACE?

转载 作者:行者123 更新时间:2023-11-27 23:35:27 24 4
gpt4 key购买 nike

注意:

  • 使用 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);

注意:

  • E_NOINTERFACE 返回
    • *ppvObject 设置为NULL

问题:

  • 我如何确认它确实已注册 - 如果这是问题所在?

最佳答案

这里的问题是您混淆了类对象和对象本身。 CoGetClassObject 将为您提供指向实现 IClassFactory 的对象的指针,并旨在创建您感兴趣的对象的实例。它不是该对象的实际实例。

在您的示例中,您通过在 IClassFactory 指针上调用 QueryInterface 获得一个 IUnknown 指针。该指针仍然指向类对象的实例,因此为您感兴趣的接口(interface)执行 QueryInterface 会导致错误。相反,您需要调用 IClassFactory::Createinstance获取指向实际对象的 IUnknown 指针,并对该指针执行 QueryInterface

关于c++ - 为什么在创建支持该接口(interface)的对象时得到 E_NOINTERFACE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/598939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com