私は、C++ ライブラリを .NET プロジェクトに統合することを目指している通常の .NET 開発者です。私にはいくつかのアイデアがありますが、一般的に C++ は初めてなので、使用しようとしているテクノロジの限界がわかりません。C++ プロジェクトは基本的に、さまざまなポストプロセッシング トリックを使用してマルチトラック オーディオ ファイルを再生できる高速サウンド レンダラーです。これはすべて素晴らしいことですが、統合したい単純な .NET WinForms アプリがあることを考えると、物事が乱雑に見え始めます。
まず、C++ プロジェクトには .NET バインディングも ActiveX/COM 統合もありません。その単純な 'ol MS VC++ 9 プロジェクトです。.NET アプリでプロジェクトを操作する場合は、何らかの方法でそれとやり取りする必要があります。クラス インスタンスの作成、プロパティの設定、メソッドの呼び出し、データの入出力のマーシャリングなど。
次に、独立した Windows アプリとして実行するように構築され、MS Windows API を使用して独自のウィンドウを管理します。これで問題ありませんが、どういうわけか、.NET VMをバックグラウンドで実行し、ショーを管理し、すべての C# コードを実行する必要があります。私は C++ を書いていないので、このライブラリを中心にアプリを構築するには C# に固執する必要があります。
第 3 に、C++ ライブラリと同じプロセスで実行しているかどうかに関係なく、これら 2 つの個別のアプリを 1 つのアプリのようにビルド/インターフェイス/デバッグする方法が必要です。高性能データ操作用の C++ DLL をいくつか作成したことを除いて、C++ プログラミングのバックグラウンドはありません。
それで、多くの質問と開始方法がわかりません!
この lib を完全にコンパイルして VC EXE に入れることはできますが、.NET コードを一緒にコンパイルするにはどうすればよいですか? あるいは、C++ コードを .NET EXE にコンパイルして、管理された環境で実行するにはどうすればよいですか? このために設計されたものではないことに注意してください。あまり変更しようとすると、誤動作する可能性があります。
主な問題は、それとのインターフェースです。一部の C++ クラスを .NET からアクセスできるように公開するにはどうすればよいですか? 私は必要なクラスを正確に知っており、.NET から利用できるようにするために必要なクラスは、関連するメソッド/プロパティと共に数十個だけです。.NET VM が前後に転送されるバイトのクラス構造を理解できるように、.NET でラッパー クラスを手書きしてもかまいません。コードのほとんどを .NET に残すことができるように、管理された環境から C++ オブジェクトを直接操作できることを願っています。
独立したアプリとして実行したとしても、それと通信するためにソケットなどに頼る必要がありますか? これは絶対に最悪のケースであり、これを回避するために何でもします。
助けや指針をいただければ幸いです。自分自身と目の前のタスクを明確にし、質問が十分に具体的で回答可能であることを願っています。助けてくれてありがとう!
編集:ラッパー クラスを記述または生成する場合、P/Invokeを使用してクラス インスタンスを作成し、それらのメソッドを呼び出して、バックグラウンドでネイティブ C++ コードを実行させることはできますか? そのような C++ オブジェクトのメモリはどこに保存され、管理されますか? .NET ヒープ内か外部か?