2012-04-17 18 views
0

私は、COMオブジェクトとして登録されたC#で書かれた小さなDLLを使用して、Active Directoryからいくつかの情報を収集するデスクトップアプリケーションを手に入れました。アプリはC + +で書かれて、それは正常に動作します。コンパイル時にCOM DLLを参照せずにこれを行う方法を見つけることができません(私は実際には、テストツールの種類を使用する必要があります) COM登録dll)C#クライアントアプリケーションからC#COMサーバーDLLを呼び出す

オブジェクトをインスタンス化することはできましたが、IDLから作成したインターフェイスにインスタンスをキャストできません。また、デバッガは、すべてのメンバが表示されたインスタンスの正確なタイプを認識します。私はこれがDLLがCLRにもロードされていると思われます。

これも可能ですか?

ありがとう

答えて

0

C#プロジェクトからCOMコンポーネントを使用することができます。一般的な手順は次のとおりです。

使用するCOMコンポーネントを見つけて登録します。 regsvr32.exeを使用して、COM DLLを登録または登録解除します。

COMコンポーネントまたはタイプライブラリへの参照をプロジェクトに追加します。

参照を追加すると、Visual Studioはタイプライブラリを入力として使用するTlbimp.exe(タイプライブラリインポータ)を使用して、.NET Framework interopアセンブリを出力します。ランタイム呼び出し可能ラッパー(RCW)とも呼ばれるアセンブリには、タイプライブラリにあるCOMクラスおよびインターフェイスをラップする管理クラスおよびインターフェイスが含まれています。 Visual Studioは、生成されたアセンブリへの参照をプロジェクトに追加します。

RCWで定義されているクラスのインスタンスを作成します。これにより、COMオブジェクトのインスタンスが作成されます。

他の管理オブジェクトと同じようにオブジェクトを使用します。ガベージコレクションによってオブジェクトが再生されると、COMオブジェクトのインスタンスもメモリから解放されます。

詳細については、「COMコンポーネントを.NET Frameworkに公開する」を参照してください。

詳細Article

+0

を述べている記事で反射を扱うのすべての混乱を使用することをお勧め。 – fiamista

1

あなたがすることはできません。 IDEは、タイプライブラリへの参照を追加させることを拒否します。レイトバインディングを使用すると、それをだますことができます。しかし、それでもCLRをだますことはできません。CCWとRCWの両方を作成することはありません。 COM固有のパスを実際に実行するには、C++やスクリプト言語などのネイティブクライアントが必要です。

ちょうどいいことはありません。アセンブリ参照を直接使用し、通常のC#コードを使用してテストしてください。

0

私はあなたが.NET 4.0 dynamicタイプの代わりに、あなたはTlbimp.exeをはNETアセンブリのためのCCWを作成することを拒否ので、これは動作しません