From: Vadim Zeitlin Date: Tue, 15 Aug 2006 12:59:22 +0000 (+0000) Subject: resolve IsWow64Process() dynamically; don't rely on its declaration being present... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/6deb397d295d969d2222270505206a8ded930f3f resolve IsWow64Process() dynamically; don't rely on its declaration being present in the headers git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40615 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/msw/utils.cpp b/src/msw/utils.cpp index ece5167e97..d5a9de6069 100644 --- a/src/msw/utils.cpp +++ b/src/msw/utils.cpp @@ -1162,19 +1162,27 @@ wxString wxGetOsDescription() return str; } -// taken from http://blogs.msdn.com/oldnewthing/archive/2005/02/01/364563.aspx bool wxIsPlatform64Bit() { #if defined(_WIN64) return true; // 64-bit programs run only on Win64 -#elif defined(_WIN32) - // 32-bit programs run on both 32-bit and 64-bit Windows - // so must sniff - BOOL f64 = FALSE; - return IsWow64Process(GetCurrentProcess(), &f64) && f64; -#else - return false; // Win64 does not support Win16 -#endif +#else // Win32 + // 32-bit programs run on both 32-bit and 64-bit Windows so check + typedef BOOL (WINAPI *IsWow64Process_t)(HANDLE, BOOL *); + + wxDynamicLibrary dllKernel32(_T("kernel32.dll")); + IsWow64Process_t *pfnIsWow64Process = + (IsWow64Process_t *)dllKernel32.RawGetSymbol(_T("IsWow64Process")); + + BOOL wow64 = FALSE; + if ( pfnIsWow64Process ) + { + (*pfnIsWow64Process)(::GetCurrentProcess(), &wow64); + } + //else: running under a system without Win64 support + + return wow64 != FALSE; +#endif // Win64/Win32 } wxOperatingSystemId wxGetOsVersion(int *verMaj, int *verMin)