2013-07-08 29 views
2

我是一個COM初學者。我有一個使用regsvr32命令註冊的DLL文件。在COM客戶端中,我嘗試使用CoCreateInstance函數,但它不起作用。這是我的代碼:如何在C++中使用CoCreateInstance

IMessageBox *pBox;   
hr = CoCreateInstance(
      __uuidof(IMessageBox), 
      NULL, 
      CLSCTX_INPROC_SERVER, 
      IID_IUnknown, 
      (void **)&pBox 
    ); 

IMessageBox是在我的DLL文件中定義的接口。它實現了IDispatch接口。 hr的結果顯示錯誤REGDB_E_CLASSNOTREG。我如何使用CoCreateInstance功能?

+1

第一個參數是CLSID,它是要創建的類對象的GUID。我們不知道,但它肯定不是IMessageBox接口的引導。 –

+1

澄清:假設你想使用一個實現了IMessageBox接口的AcmeMessageBox。然後你會傳遞'__uuidof(AcmeMessageBox)'和'IID_IMESSAGEBOX'。 – MSalters

回答

2

那麼,錯誤告訴你什麼是問題。您正在請求的類未在COM註冊表中註冊。這可能是因爲你註冊的課程的IID不是你要求的。另一種常見的失敗模式是,你註冊了一個32位的DLL,你的調用進程是64位。或相反亦然。

4

而不是__uuidof(IMessageBox)您必須通過要實例化的類的UUID - 即先前使用regsrv32註冊的類。

相關問題