26

私の同僚から、Visual Studioでは.dllC#ラッパークラスをポイントして自動的に生成できると言われました。これは本当に可能ですか?もしそうなら、これを達成するにはどうすればよいでしょうか?私はウェブを閲覧しましたが、何も思いつきませんでした!

皆さんありがとう!


私もこれらのリソースを共有すると考えました、

4

3 に答える 3

37

3 ケース:

  1. DLL はマネージ アセンブリを表します => プロジェクトで直接参照して使用します
  2. DLL は COM オブジェクトを表します => tlbimp.exeユーティリティを使用してマネージ ラッパーを生成できます
  3. DLL は、いくつかのエクスポートされた関数を含むアンマネージ ライブラリを表します。それが一番大変です。ツールはありません。エクスポートされた関数名とパラメーターを知り、マネージ P/Invoke ラッパーをビルドするには、ライブラリのドキュメントを参照する必要があります。dumpbin.exeユーティリティを使用して、エクスポートされた関数のリストを表示できます。さまざまな手順に関する MSDNの記事を次に示します。
于 2012-07-30T12:19:52.533 に答える
8

これは、どの DLL でも不可能です。非常に特殊な種類で、COM サーバーを実装するものです。コンバーターは、タイプ ライブラリによってそのようなサーバーに提供される、エクスポートされた型の適切な説明を必要とします。

タイプ ライブラリは、マネージ アセンブリのメタデータとまったく同じです。最初はスタンドアロン ファイル (.tlb ファイル) として機能しますが、多くの場合、DLL にリソースとして埋め込まれます。適切な場所は、型の説明をそれを実装するコードに近づけることです。.NET アセンブリのメタデータと同様です。

タイプ ライブラリを確認するためのいくつかのツール (Express で機能するかどうかは不明): Visual Studio では、File + Open + File を使用して、たとえば c:\windows\system32\shell32.dll を選択します。その DLL にリソースが表示されます。TYPELIB ノードに注意してください。それがタイプライブラリです。バイナリであるため、実際に読み取ることは実用的ではありません。そのためには、Visual Studio コマンド プロンプトから OleView.exe を実行します。File + View Typelib を開き、同じ DLL を選択します。これにより、タイプ ライブラリが IDL (タイプ ライブラリの作成に最初に使用されたインターフェイス記述言語) に逆コンパイルされます。非常に読みやすく、言語を理解するのにほとんど問題はありません。また、.NET Tlbimp.exe がそのタイプ ライブラリを同等の C# 宣言に変換する方法を簡単に確認できます。

タイプ ライブラリは古く、1996 年から存在しています。もともとは、16 ビット VB 拡張モデルである VBX の代替として、Microsoft の Visual Basic チームによって設計されました。それらは非常に成功しており、実質的にすべての Windows コンパイラがサポートしています。しかし、それらは表現力が制限されており、ジェネリックや実装の継承などはサポートされていません。注目すべきは、Windows 8 チームが WinRT のタイプ ライブラリを置き換えたことです。彼らは .NET メタデータ形式を選びました。

于 2012-07-30T14:04:29.763 に答える