一つはwinAPI、もう一つはDxLibを使った
別々のアプリで情報を共有したいと思っています。
DxLibで描画されているウインドウにAボタンがあるとして、
Aボタンがクリックされた場合、変数に値を保存し
その変数の値をwinAPIの方に送信し
受け取った変数の値で判断させて
winAPIの画面に「Aボタンが押されました」
というような表示がしたいです。
DxLibの変数の値を
winAPIの方に送るにはどうしたらいいでしょうか?
2つの別々のアプリで情報を共有
Re: 2つの別々のアプリで情報を共有
非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なら,どちらも同じように使えます。
注意点は,SendMessageで送信することを要求されているため,受け側のウィンドウプロシージャが長時間処理 (本来してはいけない) をしていると,巻き込まれてDxLib側まで中断されてしまうことです。
WM_COPYDATAの処理だけに時間がかかるのであれば,場合によってはReplyMessageで呼び出し元を復帰させることで待機時間を減らすこともできるかと。
----
追記 (2012-11-22T09:58+09:00)
CreateFileMappingを使うことで,共有メモリを作成できます。
WM_COPYDATAはプロセス間データ通信技術でしたが,こちらは完全にプロセス間データ共有になるため,排他制御が必要になってきます。
Mutex系やEvent系の同期オブジェクトを使うか,Interlocked系のAPIを使ってフラグによる自前の排他制御を行う必要があります。
# Mutexは排他,Eventは同期ですが,1 writer - 1 readerなら,どちらも同じように使えます。
Re: 2つの別々のアプリで情報を共有
どちらのアプリもウインドウがあります。
CreateFileMappingは扱いが難しそうなので
これからプロジェクトを進行していく上で
パイプかWM_COPYDATAのどちらを使用するのか検討したいと思います。
この度はありがとうございました。
CreateFileMappingは扱いが難しそうなので
これからプロジェクトを進行していく上で
パイプかWM_COPYDATAのどちらを使用するのか検討したいと思います。
この度はありがとうございました。
MLP!MLP!