Apr 11, 2007 - UnplugDrive Portableの半透明ウィンドウ処理の問題解決
BITMAPINFOHEADER構造体で32bitビットマップを作るように変更したら、ICM32.DLLでアプリケーションエラーにならなくなったそうです。一安心。
Apr 11, 2007 - UnplugDrive Portableの半透明ウィンドウ処理の問題解決BITMAPINFOHEADER構造体で32bitビットマップを作るように変更したら、ICM32.DLLでアプリケーションエラーにならなくなったそうです。一安心。 Apr 11, 2007 - UnplugDrive Portableの半透明ウィンドウ処理の問題点ただいまベクターの掲示板(ちょっと違うけど)で行っているUnplugDrive Portableのアプリケーションエラーの調査についてですが、 ユーザ様のご協力のおかげで、だいたい問題の原因を特定できました。(マイケル様のご協力に深く感謝します) UnplugDrive Portableの半透明ウィンドウは、アルファチャンネル付きの32bitビットマップオブジェクトをCreateDIBSection() APIで作ります。 Platform SDKによれば、CreateDIBSectionには本来BITMAPINFO構造体を渡すのですが、 アルファ値を明示するためにBITMAPINFOHEADERの代わりにBITMAPV4HEADERを使って 半透明ビットマップを作っていました。 が、これがどうもダメらしく、Winampの掲示板でも「working around an OS bug that was causing CreateDIBSection to sometimes crash (divide-by-zero in ICM32) using V4 bitmap header struct」と、UnplugDrive Portableと同じ現象のbug fixが報告されていました。 じゃ、Platform SDKに記載されているように厳密にBITMAPINFO構造体(BITMAPINFOHEADER構造体)を指定しなければならないのか、 というと、そうでもないようで、Microsoft自身 http://support.microsoft.com/kb/318876/ja の中でBITMAPV5HEADERでCreateDIBSectionを呼び出している例を明示しています。 とりあえず、BITMAPINFOHEADER構造体で32bitビットマップを作るように変更してみましたが、果たしてこれで問題解決するかどうか、結果待ちです。 | ||
Copyright ©
2007
Koichi Yamamoto |