web-dev-qa-db-ja.com

アンマネージCOMdllからタイプライブラリを生成する方法

サードパーティの管理されていないCOMdllを.NETアプリケーションに使用する必要があります。 カスタムRCW を生成するには、このアセンブリを変更する必要があります。 相互運用アセンブリの編集 を行うには、特定のアセンブリのタイプライブラリが必要です。アンマネージCOMdllからタイプライブラリを生成する方法を誰かが私に説明できますか?

タイプライブラリを生成するオプションは、PASSWORD32にはありません。

ありがとう、よろしく、ロボ。

14
RoboAlex

ネイティブdllから相互運用機能アセンブリを作成するだけの場合(およびネイティブDLLはTLBをリソースとして埋め込む)、dllで直接tlbimpを呼び出すことができます。

tlbimp Foo.dll /out:Interop.Foo.dll

これにより、Interop.Foo.dllが生成されます。次に、ildasmを使用してILを変更できます。

ildasm Interop.Foo.dll /out=Foo.il
6
smarcellus

OLE-COM Object Viewer が必要です。これは、最新のものの一部として利用できます Windows SDK 。次に、[ファイル]-> [タイプライブラリの表示]に移動して、IDLをテキストファイルに保存します。次に、 [〜#〜] midl [〜#〜] (これもWindows SDKの一部)を使用して、TLBとヘッダーファイルを再生成できます。このようなことは、基本的なケースで行う必要があります。

midl /out c:\temp /header MyHeader.h MyIDLFile.idl
14
Guido Domenici

そのCOMDLLだけを持っている場合、タイプライブラリを生成することはできません。タイプライブラリは、実装されているCOMインターフェイスを記述します。ただし、アンマネージCOM DLLはDllGetClassObjectを公開するだけで済みます。これにより、IClassFactoryのみが取得され、正しいタイプを知っていれば新しいオブジェクトを作成できます。前面。

5
MSalters

TypelibがDLLリソースに埋め込まれていて、TLBファイル自体が必要なものである場合、サードパーティのソフトウェアがそれを抽出できます(ただし、他の人が指摘しているように、これは最も望ましくない場合があります)オプション)。

例えば。使用 Resource Hacker

  1. DLLファイルを開きます。
  2. ツリービューでTYPELIB\1\1033(またはその他)ノードに移動します。
  3. メニューから、[アクション]-> [リソースをバイナリファイルとして保存...]を選択します。
  4. ファイル名を選択し、それに.TLB拡張子を付けます。

これで、元のDLLを必要とせずに、その.TLBファイルを参照してビルドできます。

#import "test.tlb" named_guids
5
wardies

Visual Studio IDEは、管理されていない.exeファイルと.dllファイルからバイナリリソースを直接抽出できます。タイプライブラリがバイナリリソースとしてnonに保存されている場合-managedCOM DLL(たとえば、VSネイティブC++コンパイラを使用して構築されたもの)、次のように抽出できます。

  1. VSリソースエディター(実行可能ファイルを開くときのデフォルトエディター)で.dllファイルを開きます。
  2. リソースツリー内のタイプライブラリリソース("TYPELIB"、次に1)に移動します。
  3. タイプライブラリリソースを右クリックして、exportを選択します。 「名前を付けてファイルを保存」ダイアログボックスが表示されます。
  4. [名前を付けてファイルを保存]ボックスで、ファイル名をデフォルト(通常はbin1.bin)からMyLibrary.tlbのようなものに変更し、[OK]をクリックします。
  5. エクスポートした.tlbファイルをOleView.exeで開いて確認します(結果は、.dllをOleView.exeで開いた場合と同じように見えるはずです)。

managedDLL(C#を使用して構築されたものなど)からタイプライブラリを抽出するために、VSにはツールTlbexp.exe(VSから実行)が含まれていますコマンドプロンプト): https://msdn.Microsoft.com/en-us/library/hfzzah2c(v = vs.110).aspx

3
Boris Glick