10

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

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

bool is64bit = (sizeof(void*)==8);

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

更奇怪的事情:

  • 调用LoadLibrary()加载下的 dllc:\windows\system32\some.dll效果很好
  • 在下加载 dllc:\windows\sysWow64\some.dll将失败(错误代码 193:some.dll 不是有效的 win32 应用程序)

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

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

4

2 回答 2

10

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

您所说的一切都表明您正在运行 64 位。

在 Windows 64 位中,该System32文件夹包含64 位版本的 DLL,该SysWow64文件夹包含32 位版本。返回 TRUE时IsWow64Process,表示您是 64 位操作系统上的 32 位应用程序。

这与文件夹中的名称所暗示的相反,这可能是这看起来令人困惑的原因。基本上,该文件夹是在WoW64SysWow64下使用的 32 位版本,即“Windows 64 位上的 Windows 32 位” - 基本上,运行 32 位时使用 WoW64 DLL ,运行 64 位时使用普通 DLL。

于 2012-10-23T17:39:39.827 回答
3

Ctrl-Shitf-Esc运行任务管理器应用程序。在“进程”选项卡中,您将看到*32每个 32 位进程名称的标签。这是检查进程位数的最简单方法之一。

于 2012-10-23T17:43:32.593 回答