サードパーティの管理されていないCOMdllを.NETアプリケーションに使用する必要があります。 カスタムRCW を生成するには、このアセンブリを変更する必要があります。 相互運用アセンブリの編集 を行うには、特定のアセンブリのタイプライブラリが必要です。アンマネージCOMdllからタイプライブラリを生成する方法を誰かが私に説明できますか?
タイプライブラリを生成するオプションは、PASSWORD32にはありません。
ありがとう、よろしく、ロボ。
ネイティブdllから相互運用機能アセンブリを作成するだけの場合(およびネイティブDLLはTLBをリソースとして埋め込む)、dllで直接tlbimpを呼び出すことができます。
tlbimp Foo.dll /out:Interop.Foo.dll
これにより、Interop.Foo.dllが生成されます。次に、ildasmを使用してILを変更できます。
ildasm Interop.Foo.dll /out=Foo.il
OLE-COM Object Viewer が必要です。これは、最新のものの一部として利用できます Windows SDK 。次に、[ファイル]-> [タイプライブラリの表示]に移動して、IDLをテキストファイルに保存します。次に、 [〜#〜] midl [〜#〜] (これもWindows SDKの一部)を使用して、TLBとヘッダーファイルを再生成できます。このようなことは、基本的なケースで行う必要があります。
midl /out c:\temp /header MyHeader.h MyIDLFile.idl
そのCOMDLLだけを持っている場合、タイプライブラリを生成することはできません。タイプライブラリは、実装されているCOMインターフェイスを記述します。ただし、アンマネージCOM DLLはDllGetClassObject
を公開するだけで済みます。これにより、IClassFactory
のみが取得され、正しいタイプを知っていれば新しいオブジェクトを作成できます。前面。
TypelibがDLLリソースに埋め込まれていて、TLBファイル自体が必要なものである場合、サードパーティのソフトウェアがそれを抽出できます(ただし、他の人が指摘しているように、これは最も望ましくない場合があります)オプション)。
例えば。使用 Resource Hacker :
これで、元のDLLを必要とせずに、その.TLBファイルを参照してビルドできます。
#import "test.tlb" named_guids
Visual Studio IDEは、管理されていない.exeファイルと.dllファイルからバイナリリソースを直接抽出できます。タイプライブラリがバイナリリソースとしてnonに保存されている場合-managedCOM DLL(たとえば、VSネイティブC++コンパイラを使用して構築されたもの)、次のように抽出できます。
"TYPELIB"
、次に1
)に移動します。export
を選択します。 「名前を付けてファイルを保存」ダイアログボックスが表示されます。bin1.bin
)からMyLibrary.tlb
のようなものに変更し、[OK]をクリックします。OleView.exe
で開いて確認します(結果は、.dllをOleView.exe
で開いた場合と同じように見えるはずです)。managedDLL(C#を使用して構築されたものなど)からタイプライブラリを抽出するために、VSにはツールTlbexp.exe
(VSから実行)が含まれていますコマンドプロンプト): https://msdn.Microsoft.com/en-us/library/hfzzah2c(v = vs.110).aspx