- PR -

アプリケーション間の通信

1
投稿者投稿内容
ポーター
ベテラン
会議室デビュー日: 2005/02/03
投稿数: 50
投稿日時: 2005-03-03 18:36
皆様こんにちは。

アプリケーション間での値の受け渡しが出来るのかを
お教えください。また、方法もお教え頂ければ幸いです。
開発言語はC#です。

「A.exe」と「B.exe」というアプリがあるとします。
両方とも常に起動している状態とします。
「A.exe」は「B.exe」へ、日時や数値などの値を渡します。
「B.exe」を複数起動せずに常に「A.exe」より値を受けつづける
事は可能でしょうか?
よろしくお願いいたします。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2005-03-03 20:07
ソケット通信すればできる。
#もっと簡単な方法があるかもしれない

A.exeがクライアント
B.exeがサーバーかな?
kou
常連さん
会議室デビュー日: 2005/03/03
投稿数: 21
お住まい・勤務地: 内緒だに
投稿日時: 2005-03-03 20:37
Windowsはあまり詳しくないので他に良い方法があるかもしれませんが。。。

UNIXだとそういったプロセス間通信(IPC)の手段としてメッセージキュー、共有メモリ、セマフォといった手段があります。
Windowsの場合、キューはMSMQがそれにあたると思います(メッセージキューよりかなり高機能ですが)。共有メモリ、セマフォに該当するものはすみません。知りません。
あとは簡易的に実現するのであれば環境変数で渡すという手もあると思います。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-03-03 21:14
引用:

kouさんの書き込み (2005-03-03 20:37) より:
UNIXだとそういったプロセス間通信(IPC)の手段としてメッセージキュー、共有メモリ、セマフォといった手段があります。


Windowsにも上記に対応する手段は用意されています。呼称は多少違っていて、Pipe、Mail Slot、Memory Mapped File、Semaphore、Mutex、Event、Windows Message等など。その多くは.NetFrameworkではサポートされていないので、APIを直接呼び出す必要がありますが・・・。

MutexやEventは.NetFrameworkからも使えますね。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-03-03 22:56
引用:

アプリケーション間での値の受け渡しが出来るのかを
お教えください。また、方法もお教え頂ければ幸いです。



.NET が標準で提供する方法は「リモーティング」です。

ですが、少量のデータを断続的に、一方的に送りつけるだけなら、Windows メッセージを使うのが簡単かもしれません。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
ポーター
ベテラン
会議室デビュー日: 2005/02/03
投稿数: 50
投稿日時: 2005-03-05 13:33
皆様ありがとうございます。
お礼が遅くなり申し訳ありません。

Windowsメッセージを利用するのが簡単とお教え頂いた
のでWindowsメッセージで実現したいと考えておりますが、
送信されたメッセージの受信方法について分からない事が
ありますのでお教えください。
常にメッセージを受信待ち状態にしておき、受信し続ける様に
行いたいのですが、どのようにすればよろしいでしょうか?

以下が現状のソースの抜粋となります。

public System.Messaging.MessageQueue myQueue;
myQueue = new System.Messaging.MessageQueue(@".\Private$\MyQueue");
myQueue.Formatter = new XmlMessageFormatter(new Type[] {typeof(String)});
myMessage = myQueue.Receive(new TimeSpan(0,0,3));
myOrder = (String)myMessage.Body;

よろしくお願いいたします。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-03-05 14:54
引用:

public System.Messaging.MessageQueue myQueue;



それはメッセージキューです。

Windows メッセージとはまったく違うものです。

.NET Framework は Windows メッセージに対するサポートをほとんど持っていません。
「Windows メッセージ」を扱うには、Windows SDK レベルの知識が必要になります。

Windows メッセージの受信は Form.WndProc をオーバーライドすれば十分ですが、Windows メッセージの送信には SendMessage() API を P/Invoke する必要があります。

Windows メッセージによる少量の断続低なデータ送信には、Windows SDK で定義されている WM_COPYDATA メッセージを利用するのがよいでしょう。


_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
ポーター
ベテラン
会議室デビュー日: 2005/02/03
投稿数: 50
投稿日時: 2005-03-05 15:18
そうなんですか!お恥ずかしいです。

今まで、WindowsSDKを利用した事ないので
WindowsSDKについてから調べてみます。。。


1

スキルアップ/キャリアアップ(JOB@IT)