« 2003年10月06日 | メイン | 2003年10月08日 »

2003年10月07日

STL→MFC

大失敗をやらかしてしまった。ここ1週間ほどWindows98/Me/2000/XPで動くActiveXコントロールを作っていて、先週でコーディングが終わって今日から検査フェーズに入る予定だった。検査担当に渡す前にちょっと触ってみたところ、開発PCのWindowsXPでは動くものの、Windows2000やMeでは動作しない。試してはいないけど、たぶん98も駄目っぽい。

どうもregsvr32で登録するのに失敗しているようなので原因を調べてみると、STLを色々と使っていたためにMSVCP60.DLLを必要としていたらしい。そりゃ素のままのOSに入っているわきゃないって。さて、困った。配布サイズは小さくしないといけないから、MSVCP60.DLLを同梱するなんてのは論外。理想的なのは必要なSTLのソースを組み込んで最小限のライブラリを作ってやることなんだけど、とても今からじゃ時間が足りない。仕方ないので、泣く泣くSTLで書いた部分をMFCで書き直すことにした。std::stringはCString、std::map<std::string, std::string>はCMapStringToStringてな具合に。コンテナはそれでいいとして、関数オブジェクトやメンバ関数アダプタとかはどうすりゃいいんだ。

修正を加えてどうにかWindows2000で動くようになった。これで一安心と思いきやWindowsMeではやっぱり動かない。何だ? MSVCP60.DLLの他に不足しているDLLがあるのか。Dependency Walkerで調べると、"GlobalMemoryStatusEx"が見つからないと怒られた。あー、これってWindows2000以降でしか使えないAPIじゃん、迂闊! こういうのは"GetProcAddress"で関数ポインタとして取得して、そのOSで使えるかどうか確かめないといけないのに。同じようなAPIで"GetDiskFreeSpaceEx"はちゃんとそうやって処理してるのに、何やってるんだよ俺は。

投稿者 sai : 01:09 | コメント (0)

マウス

マイクロソフト、チルトホイール搭載の光学式無線マウス

え〜、何と言いますか……買います。家で使ってるのはMSの「Wheel Mouse Optical」というやつで、会社では同じくMSの「IntelliMouse Optical」てのを使ってるんですが、会社で5つボタンに慣れてしまうと家のが不便でたまらないわけです。ブラウザの「戻る」と「進む」に割り当てると、それはもう楽なんですわ。家で使ってるマウスの調子が最近悪いこともあるし、いい機会だから買い換えるとしよう。もちろん買うのは5ボタンの「Wireless IntelliMouse Explorer」。色は実物を見てみないと決められないけど、メタリックグレーかな。

投稿者 sai : 00:44 | コメント (0)