C#コードからアンマネージC++クラスをインスタンス化して「扱う」ことができますか(DllImportなどを使用して)?C#で管理されていないC++クラス
3
A
答えて
6
Windowsでは、COM interopを使用してC++で作業できます。しかしこれはLinux/Mac OS Xでは動作しません。
もう1つの方法は、C++クラス(C++のextern "C")の周りにCラッパーを公開することです。これは、DllImportがC ABIを必要とするため必要です。
編集:第3の選択肢はC++/CLIです。つまり、.Net用のC++コードをコンパイルします。これはWindowsのみのソリューションでもあります。
0
SWIGを使用することもできます。 LinuxとMacのMonoで動作します。
これは、C++クラスを公開するC関数のセットを生成し、DllImportでそれらを呼び出すC#クラスを生成します。
これはC#でC++クラスを継承することができ、Directors機能ではC++コードでC#でオーバーライドされた仮想メソッドを呼び戻すことができます。
関連する問題
- 1. 管理対象のC#で管理されていない無料のCコードメモリ
- 2. C++/CLIで管理クラス内の非管理対象に管理されていないポインタを渡す
- 3. C#で管理されていないエクスポートMissingMethodException
- 4. C#で管理されていない変数をマーシャリングする
- 5. Cからの管理されていないC++関数の取得
- 6. Visual C++で管理されていないコードから管理されたフォームを更新する
- 7. 管理されたC++プロジェクトのC#クラスを使用
- 8. 管理VC++で管理されていないC++でリフレクションのような操作を実行
- 9. C++/CLI:管理されていない列挙型から管理された列挙型へのキャスト
- 10. C++で管理されていないPower Pointを実行するには?
- 11. C++/CLI:管理されていないリソースのマネージラッパーでガベージコレクションを防止する
- 12. 管理されたC++クラスがcreate_taskでクラッシュする
- 13. マーシャルC#を使用してマネージコードに管理されていない構造体
- 14. C++メモリ管理でクラスを管理する方法 - study
- 15. 管理されたコードでのMarshalAsクエリ管理されていない
- 16. C++:メモリ管理について
- 17. Java管理されていないメモリストリーム
- 18. java.lang.IllegalArgumentException:管理されていないタイプ
- 19. C#system.nullreferenceExceptionユーザーコードで処理されない
- 20. Objective-C:クラス間の画像管理
- 21. C++クラス、オブジェクト、およびメモリ管理
- 22. 管理されていないクラスのメンバーはハンドルにはなれません
- 23. Silverlightで管理されていないコードを整理する
- 24. C#メモリ管理
- 25. C++インナークラスデストラクタリソース管理
- 26. C++プロセス管理
- 27. C#エラーコード管理
- 28. C#セッション管理
- 29. C++オブジェクトメモリ管理
- 30. CDIで管理されていないクラスを注入しますか?