]> git.saurik.com Git - wxWidgets.git/commitdiff
avoid warnings C4311/4312 when building with MSVC >= 7 (patch 1414052)
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 8 Feb 2006 22:32:42 +0000 (22:32 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 8 Feb 2006 22:32:42 +0000 (22:32 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37399 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/private.h
include/wx/msw/wrapwin.h

index 30aebc2836e43762a6ef3000052bece8bf4422f2..075ce5f3a9f8b5b8cdc8e8769d51c2a1712810d0 100644 (file)
@@ -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
index fb6b8f9bb644e3267e8eb75e739c6c00144a3cd2..b7b6d6e24c27cf4a1f85839e3e23f509c9f9417a 100644 (file)
 #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_