[Win32] A* <-> LONG のキャスト
VC8.0 にて、SDK によるプログラミングを行う場合、本件を忘れないようにメモしておく
// Windows 2000 にて、::SetWindowLongPtr の前に ::CreateWindowEx が
// 存在すると ::GetLastError が 1411「そのクラスはありません。」を
// 返す場合があるので、::CreateWindowEx と ::SetWindowLongPtr の間に
// ::SetLastError(0); を挿入すると良いようです
//
// この時、::CreateWindowEx は NULL を返している訳ではないようですが、
// エラー時に毎回 ::SetLastError(0); するのは無駄であるので、::SetWindowLongPtr の
// おかしな仕様(返り値の値域)に対応するため、::SetWindowLongPtr の直前で
// ::SetLastError(0); することにします
::SetLastError(0);
#ifdef _WIN64
if (0 == ::SetWindowLongPtr(
member_hWnd, GWLP_USERDATA, reinterpret_cast(this)) &&
(0 != ::GetLastError())){
#else
if (0 == ::SetWindowLongPtr(
member_hWnd, GWLP_USERDATA, static_cast(reinterpret_cast(this))) &&
(0 != ::GetLastError())){
#endif
(void)::DestroyWindow(member_hWnd);
return false;
}
HOME