2 つの Windows サービスがあります。1 つ目は C# で記述され、2 つ目はアンマネージ C++ で記述されています。双方向のプロセス間通信を行う方法を知りたいです。
8 に答える
プロセス間通信が常に同じマシンで行われる場合は、他のオプションよりも高速であるため、名前付きパイプが最適です。
ただし、ある時点でこの通信がマシンの境界を越えて発生する可能性がわずかでもある場合は、ソケットアプローチを使用してください。C ++の場合、winsock2.hヘッダーファイルが必要です。C#では、System.Net.Sockets
名前空間を使用します。
アンマネージC++を実行してからしばらく経ちましたが、C ++側でサーバーを作成してTcpClient
から、C#側でクラスを使用すると、C++コードを作成する必要が少なくなることを思い出します。
ソケットはおそらくあなたの最善の策です。
ソケットを使用すると、必ずしも同じマシン上にある両方のプログラムに関連付けられるとは限りません。
また、これは最も移植性の高いオプションである可能性があります(Windowsにはソケット用のselect()もあります)。
これを行うにはいくつかの方法がありますが、WCFとCOM+を使用するのが最善の方法だと思います。COM +でサービスをホストしている場合は、.NETサービスのWCFを介して、およびアンマネージコードのCOMインターフェイスを介してサービスにアクセスできます。
開始するには、MSDNドキュメントの次のセクションを確認することをお勧めします。
WCFサービスとCOM+の統合:http: //msdn.microsoft.com/en-us/library/bb735856.aspx
COM +アプリケーションとの統合の概要:http: //msdn.microsoft.com/en-us/library/ms734723.aspx
ソケットとメッセージングシステムだと思います。GoogleProtocolBuffersを確認してください。
ソケットと名前付きパイプは、マネージド環境とアンマネージド環境で十分にサポートされている 2 つのオプションです。
シングルトン COM オブジェクトを作成します。この COM オブジェクトでデータを維持します。この COM オブジェクトは、C++ と C# の両方のアプリケーションで読み取ることができます。
redisは、あらゆる種類のプロセス間通信に最適なソリューションだと思います
DCOM/RPC または名前付きパイプのいずれかを使用してください。それ以外は、安全でないか、ハッキングされているか、またはその両方です。