6

2 つの Windows サービスがあります。1 つ目は C# で記述され、2 つ目はアンマネージ C++ で記述されています。双方向のプロセス間通信を行う方法を知りたいです。

4

8 に答える 8

7

プロセス間通信が常に同じマシンで行われる場合は、他のオプションよりも高速であるため、名前付きパイプが最適です。

ただし、ある時点でこの通信がマシンの境界を越えて発生する可能性がわずかでもある場合は、ソケットアプローチを使用してください。C ++の場合、winsock2.hヘッダーファイルが必要です。C#では、System.Net.Sockets名前空間を使用します。

アンマネージC++を実行してからしばらく経ちましたが、C ++側でサーバーを作成してTcpClientから、C#側でクラスを使用すると、C++コードを作成する必要が少なくなることを思い出します。

于 2009-02-12T15:37:04.263 に答える
2

ソケットはおそらくあなたの最善の策です。

ソケットを使用すると、必ずしも同じマシン上にある両方のプログラムに関連付けられるとは限りません。

また、これは最も移植性の高いオプションである可能性があります(Windowsにはソケット用のselect()もあります)。

于 2009-02-12T03:44:24.227 に答える
1

これを行うにはいくつかの方法がありますが、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

于 2009-02-12T03:45:12.837 に答える
1

ソケットメッセージングシステムだと思います。GoogleProtocolBuffersを確認してください。

于 2009-02-12T03:46:30.480 に答える
1

ソケットと名前付きパイプは、マネージド環境とアンマネージド環境で十分にサポートされている 2 つのオプションです。

于 2009-02-12T03:40:27.810 に答える
0

シングルトン COM オブジェクトを作成します。この COM オブジェクトでデータを維持します。この COM オブジェクトは、C++ と C# の両方のアプリケーションで読み取ることができます。

于 2009-02-12T16:04:26.163 に答える
0

redisは、あらゆる種類のプロセス間通信に最適なソリューションだと思います

于 2015-05-06T16:19:54.337 に答える
0

DCOM/RPC または名前付きパイプのいずれかを使用してください。それ以外は、安全でないか、ハッキングされているか、またはその両方です。

于 2009-02-12T03:39:53.380 に答える