3

C# プロジェクトを作成し、既存のネイティブ (C++) コードを実装したいと考えています。誰かがそれについての良いチュートリアルを知っていますか?

ありがとう!

4

6 に答える 6

4

P/Invoke を使用して、アンマネージ メソッドを呼び出すことができます。いくつかの例を投稿します。 これは MSDN の公式ドキュメントへの参照です。 これは、一般的な Windows の管理されていないライブラリのほとんどと、メソッドのシグネチャと例を備えた、コミュニティが管理する Web サイトです。

于 2009-01-15T13:44:45.457 に答える
3

既存のコードを実装することで、C ++コードに最小限の変更を加えて、C#から呼び出したいと思います。

私はファンであり、オンラインで役立つサンプルの章がいくつかあるC ++ / CLIinActionという本を最近購入しました。

このCodeProjectの紹介は、良い出発点です。

C ++ / CLI in Actionの作成者は、CodeProjectに関する多数の記事を持っています。彼の索引のC ++/CLIセクションまでスクロールダウンしてください。

P / Invokeに関するウィキペディアの記事には、そのアプローチを使用したくない理由がいくつかありますが、私はそれに同意します。

  • コンパイラによるタイピングサポートの喪失
  • 手動でタイプをマップする必要があるため、データタイプまたは配置の問題が発生する可能性があります
  • ガベージコレクションされたオブジェクトを固定する必要があります

MSDNの最適な出発点は、要約記事です。

于 2009-01-18T16:28:27.957 に答える
3

あなたのC++コードが管理されている場合(あなたが言うように)、非常に正当な理由がない限り、C++のままにしておくことをお勧めします-将来のC#(など)アセンブリはそれをそのまま参照できるようにする必要があります'。

于 2009-01-15T13:48:57.477 に答える
0

C++ コードのマネージ ラッパーを試してみませんか。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmxspec/html/vcmg_accessingcodefromframeworkobjects.asp

于 2009-01-15T13:46:07.217 に答える
0

おそらくこれを行う最も簡単な方法は、C++/CLI プロジェクトを作成することです。これにより、マネージド C++ とアンマネージド C++ を混在させることができます。次に、既存のアンマネージド C++ クラスをマネージド .Net ラッパーでラップして、C# コードから直接呼び出すことができます。MSDN マガジンには、C++/CLI に関する優れた紹介記事があります。

相互運用性は、C スタイルの関数を呼び出す場合にのみ役立ちます。純粋な C++ クラスと対話するために実際に使用することはできません。

于 2009-01-15T13:50:14.480 に答える
0

私はこれを実践して学んだので、良いチュートリアルはありませんが、注意する必要があることがいくつかあります。マネージ C++ と C++/CLI は両方とも、アンマネージ コードと統合され、醜い継ぎ目がほとんどありません。これは C# には当てはまりません。マネージ C++ では、次のようなことがかなり可能です。

dotNetForm->Text = S"My Project"; // regular managed code
::SetWindowText(dotNetForm->Handle, "Your Project"); // mixed managed/unmanaged

一方、C# では、SetWindowText に P/Invoke する必要がありますが、実際にはそうではありません。これは単純な例ですが、マネージ C++ コンパイラは、多くの相互運用を透過的に実行するという奇妙な組み合わせであることに注意する必要があります。同時に何もしません (つまり、暗黙的なマーシャリングは行いません)。

于 2009-01-15T13:50:34.340 に答える