0

Active Directory からいくつかの情報を収集するために COM オブジェクトとして登録された C# で記述された小さな DLL を使用するデスクトップ アプリケーションを取得しました。アプリは C++ で書かれており、正常に動作します。同じ登録済み DLL のメソッド (一種のテスト ツール) を呼び出す小さなアプリを C# で作成したいと考えていますが、コンパイル時に COM DLL を参照せずにこれを行う方法がわかりません (実際には、 COM 登録 dll)

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

これは可能ですか?

ありがとう

4

3 に答える 3

1

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

アセンブリ参照を直接使用し、通常の C# コードを使用してテストするだけです。

于 2012-04-17T07:19:29.157 に答える
0

dynamicあなたが言及したその記事でリフレクションを処理するすべての混乱の代わりに、.NET 4.0タイプを使用することをお勧めします

于 2012-06-06T14:10:02.773 に答える
0

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

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

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

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

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

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

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

詳細記事

于 2012-04-17T07:06:22.823 に答える