我在Visual Studio 2010中创建了一个64位的c ++项目(在Windows 7 64bit下);
我以为我正在运行64位应用程序,以下代码返回 true :
bool is64bit = (sizeof(void*)==8);
但是如果我调用函数IsWow64Process
,它返回 FALSE ......
更奇怪的事情:
LoadLibrary()
加载c:\windows\system32\some.dll
下的dll c:\windows\sysWow64\some.dll
下加载dll将失败(错误代码193:some.dll不是有效的win32应用程序)所有这些失败都表明应用程序在32位模式下运行, 但这违背了事实,指针类型是8字节长度
我很困惑,任何帮助都将不胜感激!
答案 0 :(得分:11)
调用LoadLibrary()在c:\ windows \ system32 \ some.dll下加载一个dll工作正常;在c:\ windows \ sysWow64 \ some.dll下加载一个DLL将失败
你说的一切都表明你正在运行64位。
在Windows 64位中,System32
文件夹包含DLL的 64位版本,SysWow64
文件夹包含 32位版本 。当IsWow64Process
返回TRUE时,表示您是64位操作系统上的32位应用程序。
这与文件夹中的名称所暗示的相反,这可能是为什么这看起来令人困惑。基本上,SysWow64
文件夹是在WoW64下使用的32位版本,即“Windows 64位Windows 32位” - 基本上,当您运行时使用WoW64 DLL 32位,以及运行64位时的常规DLL。
答案 1 :(得分:3)
按Ctrl-Shitf-Esc
以运行任务管理器应用程序。在“进程”选项卡中,您将看到每个32位进程名称的*32
标签。
这是检查进程位数的最简单方法之一。