]> git.saurik.com Git - wxWidgets.git/commitdiff
resolve IsWow64Process() dynamically; don't rely on its declaration being present...
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 15 Aug 2006 12:59:22 +0000 (12:59 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 15 Aug 2006 12:59:22 +0000 (12:59 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40615 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/utils.cpp

index ece5167e97be1ed3e12f78d81957200135238da6..d5a9de6069ac5d1507843ec8c9a29b2e01ccdc75 100644 (file)
@@ -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)