2つの別々のアプリで情報を共有

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
てんむすキツネ
記事: 88
登録日時: 13年前
住所: 岡山

2つの別々のアプリで情報を共有

#1

投稿記事 by てんむすキツネ » 11年前

一つはwinAPI、もう一つはDxLibを使った
別々のアプリで情報を共有したいと思っています。

DxLibで描画されているウインドウにAボタンがあるとして、
Aボタンがクリックされた場合、変数に値を保存し
その変数の値をwinAPIの方に送信し
受け取った変数の値で判断させて
winAPIの画面に「Aボタンが押されました」
というような表示がしたいです。

DxLibの変数の値を
winAPIの方に送るにはどうしたらいいでしょうか?
MLP!MLP!

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: 2つの別々のアプリで情報を共有

#2

投稿記事 by beatle » 11年前

2つのプロセスをパイプでつなぐのは如何でしょうか。
変数を共有する、というわけではありませんが、ファイルの読み書きと同じように簡単に扱えます。
参考パイプの作成と接続

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: 2つの別々のアプリで情報を共有

#3

投稿記事 by YuO » 11年前

非DxLib側にウィンドウがあるのであれば,WM_COPYDATAでデータを送信するのが簡単です。
注意点は,SendMessageで送信することを要求されているため,受け側のウィンドウプロシージャが長時間処理 (本来してはいけない) をしていると,巻き込まれてDxLib側まで中断されてしまうことです。
WM_COPYDATAの処理だけに時間がかかるのであれば,場合によってはReplyMessageで呼び出し元を復帰させることで待機時間を減らすこともできるかと。

----
追記 (2012-11-22T09:58+09:00)

CreateFileMappingを使うことで,共有メモリを作成できます。
WM_COPYDATAはプロセス間データ通信技術でしたが,こちらは完全にプロセス間データ共有になるため,排他制御が必要になってきます。
Mutex系Event系同期オブジェクトを使うか,Interlocked系のAPIを使ってフラグによる自前の排他制御を行う必要があります。
# Mutexは排他,Eventは同期ですが,1 writer - 1 readerなら,どちらも同じように使えます。

アバター
てんむすキツネ
記事: 88
登録日時: 13年前
住所: 岡山

Re: 2つの別々のアプリで情報を共有

#4

投稿記事 by てんむすキツネ » 11年前

どちらのアプリもウインドウがあります。

CreateFileMappingは扱いが難しそうなので
これからプロジェクトを進行していく上で
パイプかWM_COPYDATAのどちらを使用するのか検討したいと思います。

この度はありがとうございました。
MLP!MLP!

閉鎖

“C言語何でも質問掲示板” へ戻る