直接または間接のメモリアクセスを持つ2つ以上のプログラム間でオブジェクト(データセット、コレクションなど)を共有するのに役立つライブラリ、コードサンプル、オープンソースプロジェクトなどはありますか。
それができない場合は、アプリを機能させる他の方法を教えてください。
言語:c#.net
プラットフォーム:vista x64
直接または間接のメモリアクセスを持つ2つ以上のプログラム間でオブジェクト(データセット、コレクションなど)を共有するのに役立つライブラリ、コードサンプル、オープンソースプロジェクトなどはありますか。
それができない場合は、アプリを機能させる他の方法を教えてください。
言語:c#.net
プラットフォーム:vista x64
WCF(Microsoftの統合されたWebサービスとリモーティングフレームワーク)を見たいと思います。これは、httpを介したXMLからTCP / IPまたは名前付きパイプを介したバイナリまで、プロセス間通信のための多くのオプションを提供します。
いくつかのさらなる記事:
あなたの最善かつ最も安全な賭けは、WCFを介して名前付きパイプをチェックアウトすることだと思います。MSDNから直接:
名前付きパイプは、プロセスが通信に使用できる共有メモリのセクションなど、Windowsオペレーティングシステムカーネルのオブジェクトです。名前付きパイプには名前があり、単一のマシン上のプロセス間の一方向または二重通信に使用できます。
私は何も知らないので、誰か他の人に答えてもらいます。それが不可能な場合、および両方のアプリケーションがリアルタイムで変更を認識する必要があるかどうかに応じて、クラスをファイル(XMLなど)にシリアル化して、現在の状態情報を共有することができます。
特定の方法でファイルを使用したり、データベースやその他の永続的なテクノロジ、メッセージング、WCF(またはより低いプロセス間通信プロトコル)を使用したりできます。
通常、特別なハックなしでは、あるプログラムのメモリアドレス空間に別のプログラムのメモリアドレス空間にアクセスすることはできません。C#では絶対にアクセスできません。
これをどのように実現できるかはよくわかりませんが、アセンブリが両方とも同じドメインにある場合は可能かもしれません。アセンブリの1つが他のアセンブリをロードし、2番目のアセンブリが最初のアセンブリを呼び出すためのポインタ/参照を与える場合、パラメータを使用して最初のアセンブリ内のメソッドを呼び出すことができる場合があります。
C#で記述されたCOMアドインである私のプロジェクトの1つでは、COM dllがアセンブリから2つの異なるクラスをインスタンス化し、静的データを共有できます。