1

C#から相互運用するためにC ++ネイティブCOM関数にアクセスするためのベストプラクティスはありますか?

たとえば、コアウィンドウコンポーネントと相互作用する100個のC ++メソッド(基本的にはネイティブライブラリ)があるとします。

基本的に、これらのC ++メソッドのラッパーをC#で作成したいので、新しく採用したすべての従業員がC ++などの代わりにそれを使用できます。C++コードはレガシーであり、私を怖がらせるので、一度だけ処理したいと思います。ここでの各メソッドのアプローチには、対応するC#メソッドがありますか?実際、これを行う別の方法はありますか?

ある種のラッパーサブシステムを使用できますか?あなたは一般的にどのようにこれを行いますか?

また、パフォーマンスに関する考慮事項などはありますか?

4

2 に答える 2

8

C++ メソッドが COM オブジェクトにある場合は、C# から COM 相互運用機能を使用できます。適切な紹介については、 CLR Inside Out: Introduction to COM Interopを参照してください。

これらの C++ メソッドが従来の API 呼び出しに似ている場合は、Platform Invoke (つまり PInvoke) を使用する必要があります。これには、アンマネージド (C++ 関数) のマネージド プロトタイプを C# で作成する必要があります。開始するのに適した場所は、Platform Invoke Tutorialです。

パフォーマンスに関する考慮事項に関する限り、通常はあまり心配する必要はありません。C# からの呼び出しは、主にデータのマーシャリングが原因で、C++ から直接呼び出すよりもわずかに遅くなる可能性があります。呼び出しているコードが重大なループにない限り、違いに気付くことはありません。

それは、それらのネイティブ関数が何をするかに大きく依存します。管理されていない世界と管理されている世界の間でデータを共有しなければならないほど、そのプロセスは難しくなります。特定の機能に関する詳細情報がなければ、どこで問題が発生する可能性があるかを判断するのは困難です。

于 2009-03-23T00:18:05.807 に答える
1

COM Interop を使用してライブラリをラップします。次に、C++ コードを、通常の方法で呼び出すことができる.NETネイティブ コードとして多かれ少なかれ扱うことができます。

于 2009-03-23T00:08:11.400 に答える