C#でのVisual C ++のラップ
-
08-07-2019 - |
質問
C ++を使用してプロセスインジェクションを行う必要がありますが、低レベルのもの以外のすべてにC#を使用することを好みます。 「関数のラッピング」について聞いたことがあります。および「マーシャリング」かなりの数のグーグル検索を行い、あちこちで情報を見つけましたが、私はまだ本当に不足しています。
有用性の順に読んだもの;
http://msdn.microsoft.com/en-us /library/ms235281(VS.80).aspx
http://www.drdobbs.com/cpp/184401742
http://geeklit.blogspot.com/2006/ 08 / calling-c-lib-from-c.html
C#ですべての低レベルのもの(ネイティブC ++)をラップして、C#に慣れている言語でそれらの関数を簡単にコマンドできるようにするにはどうすればよいですか?
トピックに関する情報は大歓迎です。
解決
P / Invokeは本当に最も簡単なアプローチだと思います:
- インジェクションを行うために必要なすべての機能を含むDLLを unmanaged C ++で作成します。
- C#コードで、いくつかの
static extern
メソッドを宣言し、DllImport
属性を使用してC ++ dllをポイントします。詳細については、arul が提供するリンクを参照してください。 292450 / wrapping-visual-c-in-c#292455 ">答え。
P / Invokeは「windows API関数」に限定されないことに注意してください。 —ネイティブDLLによって公開されている関数を呼び出すことができます。
P / Invokeの潜在的なマイナス面は、C ++関数に署名を提供する必要があることです。おそらく、いくつかの自明ではないマーシャリングを指定します。その場合、「プレーン」の代わりにCOMサーバーの構築を検討できます。 DLL、および COM相互運用を使用して、 C#のコード。
他のヒント
P / Invokeを使用する場合は、 MSDN Magazine をご覧ください。 。
Pinvokingを使用したくない場合は、マネージC ++アプリケーションを作成します。ネイティブC ++を使用して、プロセスインジェクションなどを行います。マネージc ++を使用して、このネイティブの動作に対する.NETフレンドリーインターフェイスを作成します。これは、C#から呼び出すことができます。