【问题标题】:64bit vc++ program seems to run under 32bit mode64bit vc++程序似乎在32bit模式下运行
【发布时间】:2012-10-23 17:38:08
【问题描述】:

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

我以为我运行的是 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 字节长度的事实背道而驰

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

【问题讨论】:

    标签: c++ win64


    【解决方案1】:

    调用 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。

    【讨论】:

    • +1 OP 描述的所有内容都与 64 位操作系统上的 64 位应用程序 100% 一致。
    • @DavidSchwartz 是的 - 人们会感到困惑,因为使用 WoW64 意味着您正在运行 32 位,这与您对名称的想法相反;)
    • 不错的答案。前段时间意识到 WoW64 和 system32 之间的区别让我非常头疼。
    • 我喜欢将“Wow64”视为“Win32 on Win64”的意思。好吧,我不喜欢这样想,但它有帮助。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 2023-04-03
      • 2012-01-16
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      相关资源
      最近更新 更多