64位vc ++程序似乎在32位模式下运行

A.Y*_*.N. 10 c++ win64

我在Visual Studio 2010中创建了一个64位的c ++项目(在Windows 7 64bit下);

我以为我正在运行64位应用程序,以下代码返回true:

bool is64bit = (sizeof(void*)==8);
Run Code Online (Sandbox Code Playgroud)

但如果我调用该函数IsWow64Process,它返回FALSE ...

更奇怪的事情:

  • 打电话LoadLibrary()加载一个dll c:\windows\system32\some.dll工作得很好
  • 加载一个DLL c:\windows\sysWow64\some.dll将失败(错误代码193:some.dll不是一个有效的win32应用程序)

所有这些失败都表明应用程序在32位模式下运行,但这违背了指针类型为8字节长度的事实

我很困惑,任何帮助将不胜感激!

Ree*_*sey 11

调用LoadLibrary()在c:\ windows\system32\some.dll下加载一个dll效果很好; 在c:\ windows\sysWow64\some.dll下加载一个DLL将失败

你说的一切都表明你正在运行64位.

在Windows 64中,System32文件夹中包含的64个版本的DLL文件,并在SysWow64文件夹中包含的32个版本.当IsWow64Process返回TRUE,这意味着你使用的是64位操作系统32位应用程序.

这与文件夹中的名称所暗示的相反,这可能是为什么这看起来令人困惑.基本上,该SysWow64文件夹是在WoW64下使用的32位版本,即"Windows 64位Windows 32位" - 基本上,当你运行32位时你使用WoW64 DLL ,而当你运行64位时你使用普通的DLL.