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
This commit is contained in:
Vadim Zeitlin
2006-02-08 22:32:42 +00:00
parent 3cf545c76c
commit 5489227348
2 changed files with 13 additions and 26 deletions

View File

@@ -894,38 +894,28 @@ inline void *wxSetWindowUserData(HWND hwnd, void *data)
#else // __WIN32__ #else // __WIN32__
#ifdef __VISUALC__ // note that the casts to LONG_PTR here are required even on 32-bit machines
// strangely enough, VC++ 7.1 gives warnings about 32 -> 64 bit conversions // for the 64-bit warning mode of later versions of MSVC (C4311/4312)
// in the functions below, even in spite of the explicit casts
#pragma warning(disable:4311)
#pragma warning(disable:4312)
#endif
inline void *wxGetWindowProc(HWND hwnd) inline void *wxGetWindowProc(HWND hwnd)
{ {
return (void *)::GetWindowLong(hwnd, GWL_WNDPROC); return (void *)(LONG_PTR)::GetWindowLong(hwnd, GWL_WNDPROC);
} }
inline void *wxGetWindowUserData(HWND hwnd) 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) 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) 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 // __WIN64__/__WIN32__
#endif // wxUSE_GUI #endif // wxUSE_GUI

View File

@@ -64,20 +64,17 @@
#include "wx/msw/winundef.h" #include "wx/msw/winundef.h"
// types DWORD_PTR, ULONG_PTR and so on might be not defined in old headers but // Types DWORD_PTR, ULONG_PTR and so on are used for 64-bit compatability
// unfortunately I don't know of any standard way to test for this (as they're // in the WINAPI SDK (they are an integral type that is the size of a
// typedefs and not #defines), so simply overwrite them in any case in Win32 // pointer) on MSVC 7 and later. However, they are not available in older
// mode -- and if compiling for Win64 they'd better have new headers anyhow // Platform SDKs, and since they are typedefs and not #defines we simply
// // overwrite them if there is a chance that they're not defined
// this is ugly but what else can we do? even testing for compiler version #if !defined(_MSC_VER) || (_MSC_VER < 1300)
// wouldn't help as you can perfectly well be using an older compiler (VC6)
// with newer SDK headers
#if !defined(__WIN64__) && !defined(__WXWINCE__)
#define UINT_PTR unsigned int #define UINT_PTR unsigned int
#define LONG_PTR long #define LONG_PTR long
#define ULONG_PTR unsigned long #define ULONG_PTR unsigned long
#define DWORD_PTR unsigned long #define DWORD_PTR unsigned long
#endif // !__WIN64__ #endif // !defined(_MSC_VER) || _MSC_VER < 1300
#endif // _WX_WRAPWIN_H_ #endif // _WX_WRAPWIN_H_