C#とC++コード間の参照を大量の複雑さなしに共有することは可能ですか?それとも、これは一般的に悪い考えですか?C#コードとC++コードの間のオブジェクトの共有
答えて
ネイティブコードとマネージコード間でC#オブジェクトを共有する最適なソリューションは、COM相互運用機能を使用することです。これにより、マネージコードとC++の同等のシグネチャの間で、オブジェクトのインターフェイスを本質的に共有することができます。
複雑な側面については、 COM相互運用シナリオの大部分はまっすぐであり、実際には古いCOMプログラミングよりも複雑ではありません。管理された面では、通常のインターフェースとまったく変わりません。
COMアパートメントの間で複数のスレッドを挿入したり再生を開始したりすると、少し複雑になることがあります。
私の経験上、この作業を行う最も簡単な方法は次のとおりです。
- マークは、TLBを生成アセンブリ上のComVisible(真)attrbute
- 実行tlbexpとのインタフェースが
- インポートTLBを提出あなたがC++
- をで使用するC#でインターフェイスを定義あなたのネイティブプロジェクトに組み込みます。
これは両方のプロジェクトにインターフェイス定義を取得します。どのようにプロジェクト間でそれを渡すには、あなたのアーキテクチャにもう少し詳細が必要です。
個人的な経験から推薦できるもう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++ライブラリを呼び出すだけで、すべてを実行するために必要なすべての機能をすべて備えています。
- 1. C#とC++間の変数の共有
- 2. C++のコードとオブジェクトはC?
- 3. Objective-CベースのSDK間でコードを共有
- 4. Objective-C++での共有C++/STLコードの使用
- 5. スレッド間のC++データの共有C++
- 6. PythonのアクセスC共有オブジェクト
- 7. Cコードから共有オブジェクトを作成するR
- 8. 共有コードへの共有と追加
- 9. C#オブジェクトとコード例
- 10. フラグメント間でコードを共有
- 11. C++プロセスとJavaプロセス間の共有メモリ
- 12. C#とWCFのスレッド間でオブジェクトを共有する
- 13. C#でIDisposableオブジェクトの共有所有者
- 14. 位置独立コードと共有オブジェクト
- 15. 共有コードとライブラリのユーザーストーリー
- 16. 継承のないObjective-Cのクラス間でコードを共有できますか?
- 17. 小学生グループ間のコード共有
- 18. スパーク作業者間のコード共有
- 19. React ES6クラス間のコード共有
- 20. SQL Serverとライブラリプロジェクト間の空間コードの共有
- 21. 共有コードのレイアウト
- 22. g ++の共有C++ライブラリ間の例外
- 23. C#とネイティブC++の間でメモリを共有
- 24. 印刷コード128 CコードによるC++コードのOPOSとのやりとり共通コントロール1.8
- 25. CコードへのObjective-Cコード
- 26. TFSのプロジェクト間での共有コードのマージと分岐
- 27. 共有オブジェクト:呼び出しプログラムとライブラリとの間の(c)において
- 28. JavaとC++の共有メモリ
- 29. 共有Visual C++プロジェクト間の変数
- 30. Xcodeコード共有