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

时间:2012-10-23 17:38:08

标签: c++ win64

我在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字节长度

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

2 个答案:

答案 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标签。 这是检查进程位数的最简单方法之一。