我在 Visual Studio 2010 中创建了一个 64 位的 c++ 项目(在 Windows 7 64 位下);
我以为我正在运行一个 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 字节长度的事实背道而驰
我很困惑,任何帮助将不胜感激!
最佳答案
calling LoadLibrary() to load a dll under c:\windows\system32\some.dll works well; loading a dll under c:\windows\sysWow64\some.dll will fail
您所说的一切都表明您正在运行 64 位。
在 Windows 64 位中,System32
文件夹包含 64 位版本 的 DLL,而 SysWow64
文件夹包含 32位版本。当 IsWow64Process
返回 TRUE 时,这意味着您是 64 位操作系统上的 32 位应用程序。
这与文件夹中的名称所暗示的相反,这可能就是为什么这看起来令人困惑的原因。基本上,SysWow64
文件夹是在 WoW64 下使用的 32 位版本。 ,即“Windows 64 位上的 Windows 32 位”- 基本上,在运行 32 位时使用 WoW64 DLL,在运行 64 位时使用普通 DLL。
关于c++ - 64位的vc++程序似乎在32位模式下运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13036139/