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

标签 c++ win64

我在 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/

相关文章:

c++ - 如何对在私有(private)中声明的整数进行排序

c++ - paint函数无限循环

python - 在 Python 中从 C++ 继承 Base,使用 SWIG 调用抽象方法

javascript - 在 64 位环境中加载 32 位进程

c# - 64 位和 32 位应用程序之间的自动化/WinAPI 调用

c++ - QtableView 中添加行的信号?

c++ - 在运行时处理类型删除的数据 - 如何不重新发明轮子?

windows - x64 调用约定(堆栈)和可变参数

delphi - win64\debug\dsnap.dcp 似乎已过时

调用堆栈没有提供线索