2012-01-31 20 views
0

私はそれがCoCreateInstance( "clsid")を使用して行うことができることを知っているが、ローカルマシン上で.dllとcomオブジェクトをインスタンス化する必要があるが、私はdeclaration.soについて混乱している?遅延バインディングと同様に早期Visual C++でのCOMオブジェクトの宣言/定義とインスタンス化?

  1. を結合するための は、任意のインポート/インクルージョンは、COMオブジェクトを宣言するためにどのよう
  2. を必要なのですか?
  3. CreateInstanceを前に必要な任意の他のステップは、(例えばのCoInitialize?)

またはステップコードによって工程を含む任意の特定の参照

+0

LihOとSevaの両方の回答が本当に役に立ちます。両方とも2通りの方法がありますが、#importはより効率的ですが、オブジェクトのtypelibを見つけることができません。は正しい。 – user1176743

答えて

0

最初に提供し、あなたはCoInitializeを呼び出すために、初期化場合CoUnitializeを呼び出すことを忘れないでください持っています成功しました。より多くの情報訪問MSDNについて

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

は、だからあなたのコードは次のような構造を持つことになります。 The COM Libraryで始めることをお勧めします。使用する前に、 CoInitializeCoCreateInstanceの機能をお読みください。

このチュートリアルもあなたに役立ちます:Introduction to COM - What It Is and How to Use It

+0

非常に簡単???問題が発生しなくなるまで... – CapelliC

+0

CoInitialize/CoUninitializeのペアは、メインで使用する必要があります。 CoInitializeが失敗した場合、それ以上の処理はほとんど行われません。あなたの答えは、各CoCreateInstanceの前に呼び出すことを提案します。 – CapelliC

+0

はい、COMのインスタンスを作成して使用できるようにする、COMライブラリの初期化です。 – LihO

0
  1. #import非常にお勧めします。 typelibを#importでインポートすると、ネイティブCOMフレームワークが使用されます。ネイティブCOMフレームワークは、細部の細部を分離し、一般的にはより簡単になります。ネイティブCOM、このようなもので

  2. LIBNAME :: IMyInterfacePtr pInterface。生のC++では

IMyInterface *pInterface; 

しかし、上記を参照してください。

  1. プログラムの先頭でCoInitialize()を呼び出し、最後にCoUninitialize()を呼び出します。 DLLの中で実行している場合、はるかに複雑です。
関連する問題