web-dev-qa-db-ja.com

C#からCOMオブジェクトにアクセスする最良の方法

COMオブジェクトとして公開されているさまざまなオブジェクトを使用する予定です。それらを使いやすくするために、C#オブジェクトとしてラップします。これに対する最善のアプローチは何ですか?

33
Tony the Pony

ライブラリが既に登録されている場合は、次の手順を実行して、Visual Studioに相互運用機能アセンブリを生成させることができます。

  • Visual Studioプロジェクトを開きます。
  • (参照)(ソリューションエクスプローラーのプロジェクトの右下)を右クリックし、[参照の追加]を選択します。
  • [COM]タブを選択します。 (これが表示されない場合は、COMをサポートしていないプロジェクトタイプがあります。)
  • 相互運用するコンポーネントを選択します。
  • 「OK」を選択します。

これは、すべてのCOMインターフェイスを通常のC#クラスでラップするクラスまたはC#クラスのセットです。次に、他のC#ライブラリと同じように使用します。参照のインポートが適切に機能した場合は、他の参照と同じように参照でき、メソッド/構造体/クラス/定数がその名前空間とインテリセンスに表示されます。

これで、少なくとも始められます。これが企業環境または制御可能な環境に展開されている場合、これで十分です。

36
Robert P

これに関するMSDNの優れた記事があり、マネージコードとアンマネージコードについて説明し、その実行方法を段階的に説明しています。 http://msdn.Microsoft.com/en-us/library/ms973800.aspx#

楽しんで!

8
user69889

(最初は)参照をインポートするだけです。さらに制御が必要な場合(またはVSのインポートからエラーを取得する場合)は、Windows SDKでtlbimpを使用できます。これにより相互運用機能アセンブリが作成されます。メタデータからクラス定義を取得できます。

編集:64ビットで作業したい場合、これは実際にははるかに複雑です

4
Steve