From: Vadim Zeitlin Date: Wed, 8 Feb 2006 22:32:42 +0000 (+0000) Subject: avoid warnings C4311/4312 when building with MSVC >= 7 (patch 1414052) X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/54892273481657ae3b855cf5d40e328f38b6408c avoid warnings C4311/4312 when building with MSVC >= 7 (patch 1414052) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37399 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/msw/private.h b/include/wx/msw/private.h index 30aebc2836..075ce5f3a9 100644 --- a/include/wx/msw/private.h +++ b/include/wx/msw/private.h @@ -894,38 +894,28 @@ inline void *wxSetWindowUserData(HWND hwnd, void *data) #else // __WIN32__ -#ifdef __VISUALC__ - // strangely enough, VC++ 7.1 gives warnings about 32 -> 64 bit conversions - // in the functions below, even in spite of the explicit casts - #pragma warning(disable:4311) - #pragma warning(disable:4312) -#endif - +// note that the casts to LONG_PTR here are required even on 32-bit machines +// for the 64-bit warning mode of later versions of MSVC (C4311/4312) inline void *wxGetWindowProc(HWND hwnd) { - return (void *)::GetWindowLong(hwnd, GWL_WNDPROC); + return (void *)(LONG_PTR)::GetWindowLong(hwnd, GWL_WNDPROC); } inline void *wxGetWindowUserData(HWND hwnd) { - return (void *)::GetWindowLong(hwnd, GWL_USERDATA); + return (void *)(LONG_PTR)::GetWindowLong(hwnd, GWL_USERDATA); } inline WNDPROC wxSetWindowProc(HWND hwnd, WNDPROC func) { - return (WNDPROC)::SetWindowLong(hwnd, GWL_WNDPROC, (LONG)func); + return (WNDPROC)(LONG_PTR)::SetWindowLong(hwnd, GWL_WNDPROC, (LONG_PTR)func); } inline void *wxSetWindowUserData(HWND hwnd, void *data) { - return (void *)::SetWindowLong(hwnd, GWL_USERDATA, (LONG)data); + return (void *)(LONG_PTR)::SetWindowLong(hwnd, GWL_USERDATA, (LONG_PTR)data); } -#ifdef __VISUALC__ - #pragma warning(default:4311) - #pragma warning(default:4312) -#endif - #endif // __WIN64__/__WIN32__ #endif // wxUSE_GUI diff --git a/include/wx/msw/wrapwin.h b/include/wx/msw/wrapwin.h index fb6b8f9bb6..b7b6d6e24c 100644 --- a/include/wx/msw/wrapwin.h +++ b/include/wx/msw/wrapwin.h @@ -64,20 +64,17 @@ #include "wx/msw/winundef.h" -// types DWORD_PTR, ULONG_PTR and so on might be not defined in old headers but -// unfortunately I don't know of any standard way to test for this (as they're -// typedefs and not #defines), so simply overwrite them in any case in Win32 -// mode -- and if compiling for Win64 they'd better have new headers anyhow -// -// this is ugly but what else can we do? even testing for compiler version -// wouldn't help as you can perfectly well be using an older compiler (VC6) -// with newer SDK headers -#if !defined(__WIN64__) && !defined(__WXWINCE__) +// Types DWORD_PTR, ULONG_PTR and so on are used for 64-bit compatability +// in the WINAPI SDK (they are an integral type that is the size of a +// pointer) on MSVC 7 and later. However, they are not available in older +// Platform SDKs, and since they are typedefs and not #defines we simply +// overwrite them if there is a chance that they're not defined +#if !defined(_MSC_VER) || (_MSC_VER < 1300) #define UINT_PTR unsigned int #define LONG_PTR long #define ULONG_PTR unsigned long #define DWORD_PTR unsigned long -#endif // !__WIN64__ +#endif // !defined(_MSC_VER) || _MSC_VER < 1300 #endif // _WX_WRAPWIN_H_