VC2005のwindows.h
VC2003までのwindows.hでは、MessageBoxやGetMessageなどがwinusr.h内で以下のように定義されていました。
#ifdef UNICODE #define MessageBox MessageBoxW #else #define MessageBox MessageBoxA #endif // !UNICODE
#ifdef UNICODE #define GetMessage GetMessageW #else #define GetMessage GetMessageA #endif // !UNICODE
つまり、自分でMessageBoxという関数を作れば、当たり前のように「MessageBoxA」などという関数に置換されて、コンパイルエラーとなっていました。
ところが、VC2005では、この問題がほぼ解決され、以下のように定義されています。
#if defined(_M_CEE) #undef MessageBox __inline int MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType ) { #ifdef UNICODE return MessageBoxW( #else return MessageBoxA( #endif hWnd, lpText, lpCaption, uType ); } #endif /* _M_CEE */