2009-08-22 17 views

答えて

3

ネイティブコードとマネージコード間でC#オブジェクトを共有する最適なソリューションは、COM相互運用機能を使用することです。これにより、マネージコードとC++の同等のシグネチャの間で、オブジェクトのインターフェイスを本質的に共有することができます。

複雑な側面については、 COM相互運用シナリオの大部分はまっすぐであり、実際には古いCOMプログラミングよりも複雑ではありません。管理された面では、通常のインターフェースとまったく変わりません。

COMアパートメントの間で複数のスレッドを挿入したり再生を開始したりすると、少し複雑になることがあります。

私の経験上、この作業を行う最も簡単な方法は次のとおりです。

  • マークは、TLBを生成アセンブリ上のComVisible(真)attrbute
  • 実行tlbexpとのインタフェースが
  • インポートTLBを提出あなたがC++
  • をで使用するC#でインターフェイスを定義あなたのネイティブプロジェクトに組み込みます。

これは両方のプロジェクトにインターフェイス定義を取得します。どのようにプロジェクト間でそれを渡すには、あなたのアーキテクチャにもう少し詳細が必要です。

0

個人的な経験から推薦できるもう1つの解決策は、アクセスするC++コードが大きすぎるか複雑すぎる場合に、2つの間で管理されたC++インターフェイスを使用することです。

たとえば、私はRakNet C++ネットワークライブラリをC#プロジェクトで使用しています。ソリューションは、C#で大規模なラッパークラスを作成して、必要なC++関数にアクセスしたり、COM相互運用機能として使用したり、Managed C++(Visual C++/CLI)を使用することができる関数の周りにC++ラッパーを作成します。

私はRakNetライブラリにアクセスするためにC++を使用できるようにしましたが、作成されたクラスは別の.NETプロジェクトで直接使用することができます。したがって、メインロジックはManaged C++クラスで作成されており、.NET Frameworkとその優れた機能の一部を使用することもできます。私のC#プロジェクトでは、Managed C++ライブラリを呼び出すだけで、すべてを実行するために必要なすべての機能をすべて備えています。

関連する問題