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函数。

      谢谢-但现在:“此可连接对象不支持指定的传出接口”如果您发布您尝试执行的示例代码,我们可能会提供帮助。谢谢-但是现在:“此可连接对象不支持指定的传出接口”如果您发布您尝试执行的示例代码,我们可能会提供帮助。请投票关闭此发布-因为不再相关。谢谢,请投票结束这篇文章,因为它不再相关了。谢谢