私はC#プロセスとC++プロセスの間で高性能IPCを使用しています。私はすでにIPCメカニズムを選択しました。ただし、ネイティブ側および管理側と互換性のあるシリアル化に取り組んでください。私はprotobufを調べています。ただし、COMをIPCに使用すると、バイナリシリアル化も行われるようです。使えるかもしれません。
調べる必要のあるライブラリとメソッドは何ですか?(可能であればprotobufを追加したくないだけです)
私はC#プロセスとC++プロセスの間で高性能IPCを使用しています。私はすでにIPCメカニズムを選択しました。ただし、ネイティブ側および管理側と互換性のあるシリアル化に取り組んでください。私はprotobufを調べています。ただし、COMをIPCに使用すると、バイナリシリアル化も行われるようです。使えるかもしれません。
調べる必要のあるライブラリとメソッドは何ですか?(可能であればprotobufを追加したくないだけです)
はい、COM はそれを行うことができます。これは、proto-buf などとは根本的に異なるアプローチであり、アウトプロセス サーバーをサポートします。つまり、C++ プログラムをそのようなサーバーとして記述し、クライアント コードで自動的にそれを起動して、サーバーによって実装されたメソッドの呼び出しを開始することができます。プロセス境界を越えて取得したいデータは、そのようなメソッドの引数を介して渡すことができます。C# に相当するものは、Remoting または WCF です。
シリアル化は、実際には COM の弱点の 1 つです。境界を越えて渡されるように、引数を介して渡されるデータをエンコードする方法を知っているプロキシ/スタブと呼ばれる追加のコードを提供する必要がある場合があります。そのための多くのツール サポートがあります。まず、IDL (Interface Description Language) と呼ばれる言語でメソッドとその引数を記述します。これは、プロキシ/スタブ DLL に自動的にコンパイルできます。渡すデータが特に厄介な場合は、カスタム マーシャラーを作成する必要がある場合があります。または、特に単純で、COM オートメーションでサポートされている型のサブセットに制限する場合は、プロキシ/スタブはまったく必要なく、標準のマーシャラーを使用できます。タイプ ライブラリを使用し、これも IDL から自動生成されます。
ここには多くの柔軟性がありますが、それには確かに代償が伴います。COM は難しいと広く考えられています。問題が発生した場合のデバッグも容易ではありません。「理解できる」ことが主な目標である場合は、COM を考慮しないでください。proto-buf の方がはるかに簡単に取り組むことができます。一歩下がって、名前付きパイプまたはソケットはどちらのランタイム環境でも簡単に使用できますが、データの逆シリアル化はユーザー次第です。XML を使用すると、それをわかりやすくすることができます。