他のアプリへデータ の送信でエラー

解決


インデックス  2013-04-03 17:06:04  No: 44187  IP: 192.*.*.*

http://mrxray.on.coocan.jp/Delphi/plSamples/650_SendText.htm

上記URLの
他のアプリへデータ ( 文字列や画像 ) の送信 ( Delphi 同士 )
の「02_レコード型の場合」を参照して
MDIアプリケーションにパラメータを受け取りさせたいのですが、
受取側のプログラムでURLと同様にプログラムしたところ、
既に子ウィンドウのプロセス間通信で 
WM_COPYDATAを使用しており、
「メッセージメソッドのインデックスが重複しています」というエラーが出力されました。

※procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
が2つ

他に方法がないものかと探しておりますが
よくわかっておりません。
簡単なことなのかもしれないですが、
どうかご教授お願いします。

編集 削除
インデックス  2013-04-03 17:50:03  No: 44188  IP: 192.*.*.*

すいません。自己解決しました。

編集 削除
DEKO  2013-04-03 18:02:02  No: 44189  IP: 192.*.*.*

こんにちは。

WM_COPYDATA のメッセージハンドラを一つにして、
TCopyDataStruct の dwData の値で処理を分岐させればいいのではないでしょうか?

# 送り側で dwData を指定するという事です。
# 詳細は以下で。
http://mrxray.on.coocan.jp/Halbow/Notes/N012.html

編集 削除
DEKO  2013-04-03 18:15:45  No: 44190  IP: 192.*.*.*

おっと... (^^;A

自己解決した時は "何をどうしたから解決したのか?" を書いておくと、
誰かが同じ問題で悩んだ時のヒントになると思いますよ。

編集 削除
インデックス  2013-04-03 18:27:54  No: 44191  IP: 192.*.*.*

DEKOさん、こんにちは。

自己解決方法ですが、しょうもないお話で
procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
を2行宣言しておりましたが、1行は必要ないことがわかりましたので(汗)
教えていただきありがとうございます。

表題とは違うのですが、
別々のアプリ同士で
検索メイン画面⇒検索結果詳細画面
を2つの別exeで作成しまして、
検索メイン画面側から検索結果詳細画面にパラメータを渡し、
パラメータを元にデータを表示するようなプログラムを作成しているのですが、
基本的に検索結果詳細画面は表示しているのですが、
初期起動や、なんらかの原因で閉じてしまった時に、
検索メイン画面側から検索結果詳細画面アプリの起動と同時にパラメータを渡すということを
やりたいのですが、どうプログラムすれば良いのでしょうか?

パラメータは、stringかintegerの変数を可変で考えてます。
検索メイン画面側から、テーブルを絞り込んだ結果のユニークなレコード行を
検索結果詳細画面に渡してやり、検索結果詳細画面側から再度、検索⇒表示という具合です。

あつかましくも。お願いします!

編集 削除
DEKO  2013-04-03 19:12:45  No: 44192  IP: 192.*.*.*

> 検索メイン画面側から検索結果詳細画面アプリの起動と同時に...

別 EXE なのであれば、単純にコマンドライン引数で渡すようにするか、
親の方で "実行した子 (EXE) の存在確認" をしてから、
パラメータを投げるようにすればよろしいかと思います。

編集 削除