2012-01-31 63 views
0

我需要在visual C++中實例化com對象,它是.dll和本地機器上的,我知道它可以通過使用CoCreateInstance(「clsid」)來完成,但我對於declaration.so感到困惑,任何人都可以解釋涉及的所有步驟? 後期綁定和早期綁定用visual C++聲明/定義和實例化COM對象?

  1. 是任何進口/包所需
  2. 如何聲明COM對象?
  3. 的CreateInstance之前所需的任何其他步驟(例如CoInitialize的?)

或提供一步代碼

+0

感謝LihO和Seva你們的回答都很有幫助,兩者都顯示了兩種不同的方式,#import更有效率,但是我找不到一個object的typelib,我很困惑我應該接受哪個回答是正確的。 – user1176743 2012-02-02 07:10:20

回答

0

首先涉及的步驟你必須調用CoInitialize,不要忘了具體提到,如果初始化調用CoUnitialize那是成功的。

所以,你的代碼將具有以下結構:

HRESULT hr = CoInitialize(NULL); 
if (SUCCEEDED(hr)) 
{ 
    try 
    { 
     CoCreateInstance(...) 
     // ... 
    } 
    catch (_com_error &e) 
    { 
     //... 
    } 
    CoUninitialize(); 
} 

欲瞭解更多信息,請訪問MSDN。我建議您從The COM Library開始,然後在使用它們之前閱讀有關CoInitializeCoCreateInstance函數的內容。

本教程也可以幫助您:Introduction to COM - What It Is and How to Use It

+0

很容易?直到沒有問題出現... – CapelliC 2012-01-31 20:11:43

+0

我記得應該使用CoInitialize/CoUninitialize對,比如在main中。如果CoInitialize失敗,則進一步處理沒有意義。您的答案建議在每個CoCreateInstance之前調用。 – CapelliC 2012-02-01 14:55:07

+0

是的,它是COM庫的初始化,它允許您創建COM的實例並使用它。 – LihO 2012-02-01 15:35:56

0
  1. #import是非常建議。如果使用#import導入typelib,則將使用Native COM框架,該框架隔離了一些堅韌的細節,使生活通常更加簡單。

  2. 在Native COM,這樣的事情:

    LIBNAME :: IMyInterfacePtr pInterface;

在原始C++:

IMyInterface *pInterface; 

但是見上文。

  1. 在程序開始時調用CoInitialize(),最後調用CoUninitialize()。如果在DLL中運行,那麼它更復雜。