.NET Framework Win32関数利用

Last-modified: 2006-12-12 (火) 10:12:14

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 */