5
  • C++ で記述されライブラリC#で使用できるかどうか疑問に思っていました
  • 問題は、ライブラリに独自の構造とクラスがあることです。C# で使用できますか?

ありがとう

編集
このライブラリはオープンソースです..
私の要件がC++コードで特別なものを必要とする場合、私はそれを行うことができます...

4

3 に答える 3

3

2 つの方法があり、どちらもアダプター (C++ クラスを .NET クラスにマップする) を使用します。

  • C++/CLI
  • COM

前者は COM 経由を回避し、C++ コードの多くは正しいスイッチを使用してコンパイルできる可能性があります。

追加: 理論的には P/Invoke は可能かもしれませんが、すべての C++ セマンティクスが失われます。C++ オブジェクトの有効期間を手動で処理する必要があります (およびインスタンス参照を としてIntPtr)。さらに、もちろん、マングルされた名前を呼び出す必要があります...

于 2010-05-23T15:38:44.393 に答える
3

もう 1 つのオプションは、C++/CLI でマネージ ラッパーを作成することです。私は、P/Invoke を使用する代わりにそれを好みます。

于 2010-05-23T15:39:08.467 に答える
3

マネージ コードで C++ クラスを直接使用することはできません。主な問題は、C++ コードで使用されているものと同じメモリ アロケータを使用できないことと、コンストラクタとデストラクタを簡単に呼び出すことができないことです。Microsoft の従業員は、それが不可能ではないことを示すブログ投稿を投稿しました。これを行うことはお勧めしません。

COM は解決策ですが、それには常にかなり大きな書き直しと優れた COM プログラミング スキルが必要です。通常、C++/CLI 言語のマネージ クラス ラッパーが最適なソリューションです。SWIG ツールを見て、これらのラッパー クラスを自動生成することを検討してください。ただし、このツールは、解決するよりも多くの問題を簡単に作成する可能性があることに注意してください。

于 2010-05-23T15:52:14.350 に答える