2010-11-25 9 views
2

Managed C++/Cliを初めて使用しました。私は1つのレガシーCOM DLLを持っており、C++/CLIクラスでDLLをインポートしましたが、COMオブジェクトのインスタンスを作成して使用する方法がわかりません。C++/CLIでCOMオブジェクトのインスタンス化

誰でも助けてもらえますか?

答えて

2

正しく、単にしようと登録されている場合:

Type typeOfCOMObject = Type.GetTypeFromProgID("COMProject.COMClass"); 
object instanceOfCOMObject = Activator.CreateObject(typeOfCOMObject); 

次に、オブジェクトのメソッドにアクセスするには、キャストまたはリフレクションを使用しています。

2

C++/CLIからCOMオブジェクトにアクセスする方法はいくつかあります。

最も簡単な方法は、.Netランタイムを作成して管理されたのCOMオブジェクトのラッパー(natorionなど)が解答で説明することです。これを行うには、Visual Studioでinteropアセンブリを生成するか、tlbimp.exeコマンドを使用する必要があります。これはC#やVB.Netのような他の.Net言語と同じです。

もう1つの方法は、ネイティブラッパーを生成するために#importディレクティブを使用することです。これはCOMオブジェクトが.Netにマーシャリングするのが難しい多くのネイティブ構造体を使用している場合や、オブジェクトのライフタイムを制御する必要がある場合に最適な方法です。

IYourComObject obj; 
obj.CreateInstance("YourComObject"); 

(のCreateInstanceの他のオーバーロードがあります)

第三の方法は、手動でオブジェクトを作成し、すべての生成されたラッパーの手を無視することです。これは、あなたが完全にコントロールできる最も高度で難しい方法です。

CoCreateInstanceEx(__uuidof(yourcomobject), NULL, CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, NULL, 1, &instance)