bool Win64bit = (sizeof(int*) == 8) ? 1 : 0;
Run Code Online (Sandbox Code Playgroud)
我需要这个,所以我的应用程序可以正确使用Windows注册表功能(或者我需要?).
我做得对吗?
Igo*_*hov 15
以下是Raymond Chen在他的博客中建议的内容:http://blogs.msdn.com/oldnewthing/archive/2005/02/01/364563.aspx:
BOOL Is64BitWindows()
{
#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
}
Run Code Online (Sandbox Code Playgroud)
不,这不能作为运行时检查,因为sizeof(int*)在编译时修复了您选择将程序编译为32位或64位的位置,并且一旦编译,检查将具有相同的固定结果无论您在哪个平台上运行它.
但是,由于64位程序无法在32位平台上运行,因此您会发现检查工作正常,无需修改作为编译时检查:
如果将程序编译为64位,则由于上面的代码,程序将使用64位API,并且可以在64位版本的Windows上正常运行.它将无法在32位窗口上运行,因此您不会在32位版本的Windows上意外使用64位API.
v++ platform == 64-bit => sizeof(int*) == 8 => use 64-bit API
AND
( windows platform == 64-bit => 64-bit API works
OR
windows platform == 32-bit => program does not run )
Run Code Online (Sandbox Code Playgroud)
如果以32位模式编译程序,程序将正确使用32位API,这将在32位兼容模式下在64位Windows平台上运行,并且显然可以在32位平台上运行.
v++ platform == 32-bit => sizeof(int*) == 4 => use 32-bit API
AND
( windows platform == 64-bit => 32-bit API works using compatibility mode
OR
windows platform == 32-bit => 32-bit API works )
Run Code Online (Sandbox Code Playgroud)
如果你真的想从32位程序访问64位API,我敢说有API可以做到这一点,但我不确定你是否愿意.