MASATOの開発日記


前の開発日記 次の開発日記 一覧

2002/07/29

RPGを開発しつつ、いままでのアプリケーションのバージョンアップを図っています。 片方がもう片方の気分転換みたいな感じです。 趣味プログラムは、納期が無いのでこういうふうに切り替えられ、お気楽でいいですね。

こういった、バージョンアップのため修正や機能の追加を行うとき、そのソフトウェア設計の良さ悪さが分かります。 すんなりと修正が出来た場合は、何も問題はありません。「やっぱりこういう設計にして良かったか」という 結論にたどり着くだけです。
問題は、すんなりと修正が出来そうに無かった場合です。 「少量の修正で」「希望の機能を実装し」「その後の修正も行いやすくする」 ということを、実現しなければなりません。
結局のところは、 「そこその量を修正し」「希望の機能を実装し」「その後の修正もそれなりに行いやすくする」 というあたりになるよう修正を行うことになります。バランスが難しいですね。

RegistorWindowMessageの使い道

RegistorWindowMessageというWin32 APIを発見しました。なかなか面白そうなAPIです。 もし私がRegistorWindowMessageを実際に利用して、便利だと判断したのでしたら 正式な話題として提供するのですが、今回は、APIのHELPを見ただけで想像で語ります。

あるアプリケーションAと、Aと通信するアプリケーションBと、これまたAと通信するアプリケーションCが あったとします。通信方法は、どれもWindowメッセージのやりとりで行っているとします。 しかし、アプリケーションBの作者と、Cの作者は特にコミュニケーションが無く、好き勝手に メッセージ番号を決めて、アプリケーションAにデータを送信してくるとします。
こんなとき、アプリケーションAの作者は困ります。特に、BとCから送られてくるメッセージの 番号が一致していたら、BとCのどちらから送られてきたか判別が難しくて大変です。

こんなときにResistorWindowMessageを使用してメッセージ番号を決定すると楽です。
AとBの通信用のメッセージ番号は例えば次の様に決めます。 UINT WM_SETHOGE = RegisterWindowMessage("B.SETHOGE"); UINT WM_GETHOGE = RegisterWindowMessage("B.GETHOGE"); UINT WM_HERO = RegisterWindowMessage("B.HERO"); AとCの通信用のメッセージ番号は例えば次の様に決めます。 UINT WM_SETNEKO = RegisterWindowMessage("C.SETNEKO"); UINT WM_GETNEKO = RegisterWindowMessage("C.GETNEKO"); UINT WM_HERO = RegisterWindowMessage("C.HERO"); これだけで、メッセージ番号が重なる可能性は無くなります。 同様にしてメッセージ番号を増やしていっても、問題はありません。 AとB、AとCで情報交換が必要ですが、BとC間では情報交換の必要がありません。 これも利点ですね。

このように、限られた状況の中ではRegisterWindowMessageは役に立ちそうです。 ですが、実際にこのような状況が到来するかは微妙です。 正直、私は、アプリケーション間通信方法として、Windowメッセージを使う方法が 有力であるとは考えておりません。
既にOSで定義されているメッセージを使ってやりとりするならば便利ですが、 新たにメッセージを定義してデータをやりとりするとなると、TCP/IPやメールスロット等を 使ったほうが楽なような気がします。

そんなわけで、実用にはなりそうにないですが、もしかしたら実用になるかもしれない RegistorWindowMessageのお話でした。

前の開発日記 次の開発日記 一覧