2009-03-01 50 views
0

注:爲什麼在創建支持該接口的對象時會得到E_NOINTERFACE?

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

問:

  • 如何確認,這的確是註冊 - 如果這是問題嗎?
+0

請投票關閉帖子 - 因爲不再相關。謝謝 – Aaron 2009-03-01 15:26:24

回答

3

這裏的問題是,您正在混淆類對象和對象本身。 CoGetClassObject將爲您提供一個指向實現IClassFactory的對象的指針,用於創建您感興趣的對象的實例。它不是該對象的實際實例。

在你的例子中,你得到一個IUnknown指針通過調用QueryInterface指針IClassFactory。該指針仍然指向類對象的實例,因此對您感興趣的接口執行QueryInterface會導致錯誤。相反,您需要撥打IClassFactory::Createinstance以獲取指向實際對象的指針IUnknown,並在該指針上執行QueryInterface

+0

謝謝 - 但現在:「此可連接對象不支持指定的傳出接口」 – Aaron 2009-03-01 00:50:05

1

另外,請看CoCreateInstance函數。

相關問題