3

C++ を使用してプロセス インジェクションを行う必要がありますが、低レベルのもの以外はすべて C# を使用したいと考えています。「関数のラッピング」と「マーシャリング」について聞いたことがあります。かなりの量の Google 検索を行って、あちこちで少しの情報を見つけましたが、まだ本当に不足しています。

役に立つ順に読んだこと。
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# でこれらの関数を簡単にコマンドできるようにするにはどうすればよいでしょうか?

このトピックに関する情報は大歓迎です。

4

3 に答える 3

5

P/Invoke は本当に最も簡単なアプローチだと思います。

  • インジェクションを実行するために必要なすべての機能を含む、アンマネージC++ でDLL を作成します。
  • C# コードでいくつかのstatic externメソッドを宣言し、DllImport属性を使用して C++ dll をポイントします。詳細については、arulの回答で提供されているリンクを参照してください。

P/Invoke は "Windows API 関数" に限定されないことに注意してください。ネイティブ DLL によって公開された関数を呼び出すことができます。

P/Invoke の潜在的な欠点は、C++ 関数の署名を提供する必要があることです。これには、あまり目立たないマーシャリングを指定する可能性があります。その場合、「プレーンな」DLL の代わりに COM サーバーを構築し、COM 相互運用機能を使用して C# からコードを呼び出すことを検討できます。

于 2008-11-15T14:06:26.340 に答える
2

P/Invoke を使用する場合は、MSDN Magazineを参照してください。

于 2008-11-15T11:53:23.457 に答える
1

Pinvoking が目的でない場合は、マネージ C++ アプリケーションを作成します。ネイティブ C++ を使用してプロセス インジェクションを行います。マネージ C++ を使用して、このネイティブ動作に対する .NET フレンドリー インターフェイスを作成します。これは、C# から呼び出すことができます。

于 2008-11-15T13:21:16.103 に答える