[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; }