Microsoft 独自の管理されていない DLL の P/Invoke 署名を生成するツールに出くわしました: PInvoke Interop Assistant
サードパーティのアンマネージ DLL の P/Invoke 署名を生成する同様のツールはありますか?
または、サードパーティの DLL をPInvoke Interop Assistantにフィードする任意の方法
編集:私が解決しようとしている実際の問題
Microsoft 独自の管理されていない DLL の P/Invoke 署名を生成するツールに出くわしました: PInvoke Interop Assistant
サードパーティのアンマネージ DLL の P/Invoke 署名を生成する同様のツールはありますか?
または、サードパーティの DLL をPInvoke Interop Assistantにフィードする任意の方法
編集:私が解決しようとしている実際の問題
Googleはすぐにhttp://www.pinvoker.com/を見つけました(互換性はVS2005、2008、および2010としてリストされています。新しいバージョンで動作するように更新されていないようです)
MicrosoftのC++/ CLIコンパイラもこれを行うことができます。ヘッダーファイルを使用する/clr:safe
と#include
、ILSpy(無料)やRed Gate Reflector(以前は無料)などで抽出できるp/invokeコードが生成されます。
「SigImp Translate Snippet」とマークされた UI の 3 番目のタブを使用して、アンマネージ DLL用のPInvoke Interop Assistantを使用します。ヘッダーを「ネイティブ コード スニペット」ウィンドウにコピー アンド ペーストし、[生成] をクリックします (または [自動生成] をオンにします)。例として、私の質問からのコードをいくつか示します。何らかの理由で、エラーは [エラー] パネルに表示されず、生成されたコードの上部にコメントとして表示されることに注意してください。
何人かがすでに言っているように、生成されたコードはガイドとして使用する必要があります。必要なものを正確に取得するには、変更を加える必要があるかもしれません。
xInterop C++ .NET Bridge と .NET to Native C++ Bridge を使用して、C スタイルの DLL エクスポート関数と C++ DLL エクスポート クラスの両方を含むネイティブ DLL の C# ラッパーを作成できます。いくつかの制限付きで無料で評価できます。
免責事項: 私はxInterop C++ .NET Bridgeの作成者です。
別の代替手段はSharpGenToolsです。これは、directx API のバインディングを「自動的に」作成するために SharpDX によって使用されます。CppSharpもあり、ネイティブ C++/C ライブラリへのバインディングを生成するために QtSharp によって使用されます。これまで、CppSharp は .Net Framework 6+ とのみ互換性があります。
VS SDKに付属の Dumpbin.exe、Dumpbinを使用します。ダンプされたデータから手動でpinvoke署名を書き込む必要があります。