web-dev-qa-db-ja.com

interop dllとは何ですか?

明確化が必要です。 Crystal Reportsを使用するReportwriter dllがあります。 VB6で書かれています。このdllをasp.netプロジェクトに追加して、相互運用DLLを作成する必要があります。

私の理解では、.opコードがReportwriter dllと通信できるように、interop dllが仲介として存在します。

相互運用DLLを登録するのですか、元のdllを登録するのですか?

52
Prabu

VB6でコードを記述すると、コンパイルされた結果はCOMコンポーネントになります。 COMコンポーネントは、通常はCOMタイプライブラリを使用して記述されるインターフェイス、コクラス、構造体、および列挙型を提供します。ただし、そのCOMコンポーネントを.NETで使用するには、.NETが理解できる形式、つまり.NETアセンブリでのタイプの説明が必要です(タイプライブラリを直接操作できないため)。したがって、相互運用機能アセンブリは、タイプライブラリ内の同じものに対応するインターフェイス、構造体などの記述を含むという意味で、単なる「変換された」COMタイプライブラリです。

(相互運用機能アセンブリはhaveをタイプライブラリから生成しないため、上記は多少簡略化されています。たとえば、必要に応じてコードを手動でコーディングできます。)

よく言われることとは逆に、相互運用機能アセンブリには実行可能コードは含まれず、マーシャリングも行われません。型定義のみが含まれ、メソッドを持つことができる唯一の場所はインターフェイス内にあり、インターフェイス内のメソッドには実装がありません。 .NET呼び出しのCOM呼び出しへのマーシャリングは、実際には相互運用アセンブリから読み込まれた型の記述に基づいてCLR自体によって行われます。必要なすべてのコードをその場で生成します。

さてあなたの質問について。 COMを登録する必要がありますDLL(VB6の出力)プロジェクト-たとえば、regsvr32.exe。 COMコンポーネントではないため、相互運用機能アセンブリをそのように登録しないでください(実際にはできません)。これは単なる.NETアセンブリであるため、.exe/.dllと同じフォルダに配置できます。 、または通常どおりGACに配置します。

92
Pavel Minaev

パベルからの良い答え。さらに、.NET Frameworkバージョン4以降では、アプリケーションと相互運用機能アセンブリを展開する必要はありません- http://msdn.Microsoft.com/en-us/library/tc0204w0.aspx

7
resnyanskiy

正解です。 interop DLLは、VB6コンポーネントへの呼び出しをラップし、それらを透過的にします。

アプリケーションを実行するマシンにDLLを登録する場合、VB6 DLLを登録する必要があります。 interop DLL=はアプリのbinフォルダーに座り、呼び出しをマーシャルします。

2
Justin Niessner

VB6 dllを登録し、.NETプロジェクトで参照する必要があります。その参照はInterop.dllを作成します

2
Rubens Farias