64位VC 程序似乎在32位模式下运行
64bit vc++ program seems to run under 32bit mode
我在Visual Studio 2010中创建了一个64位C 项目(Windows 7 64bit);
我以为我正在运行一个64位应用程序,并且返回的代码 true :
bool is64bit = (sizeof(void*)==8);
但是,如果我调用函数 IsWow64Process
,它返回 false ...
更奇怪的事情:
- 调用
LoadLibrary()
在c:windowssystem32some.dll
下加载DLL - 在
c:windowssysWow64some.dll
下加载DLL会失败(错误代码193:某些dll不是有效的Win32应用程序)
所有这些失败都表明该应用程序在32位模式下运行,但这是反对事实,指针类型为8字节长度
我很困惑,任何帮助都将不胜感激!
调用LoadLibrary()在C下加载DLL: Windows System32 Some.dll效果很好;在C下加载DLL: Windows Syswow64 some.dll将失败
您所说的一切都表明您正在运行64位。
在Windows 64bit中,System32
文件夹包含DLL的 64位版本,SysWow64
文件夹包含 32位版本。当IsWow64Process
返回true时,这意味着您是64位OS上的32位应用程序。
这与文件夹中的名称所建议的相反,这可能是为什么这似乎令人困惑的原因。基本上,SysWow64
文件夹是WOW64下使用的32个位版本,它是" Windows 32位64位上的Windows 32位" - 基本上,您在运行32bit 时使用WOW64 DLLS 运行64位时正常的DLL。
按Ctrl-Shitf-Esc
运行任务管理器应用程序。在"过程"选项卡中,您将以每32位进程的名称看到*32
标签。这是检查过程的最简单方法之一。
相关文章:
- 将应用程序从32位移植到64位时出现问题
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 浮点数为 32 位和 64 位二进制表示形式
- C++易失性:保证 32 位访问?
- C++将 16 位值转换为 32 位值
- 如何在 64 位平台上计算 32 位哈希C++?
- C++中的24位到32位转换
- 在机器字大小等于 32 位的计算机上int64_t如何工作?
- uint32_t如何保证 32 位?
- 将代码从 32 位迁移到 64 位时出现问题 Visual Studio 2010
- 如何将32位字符与内联assembelyc++中的32位字符进行比较
- 一个32位版本的应用程序,建立在CentOS 6 x64上,当在较新的Linux上启动时,在"dl_itera
- x86 32位对Cuda的支持
- 我把我的编译器从32位转换为64位,但我仍然不能使用超过2GB:(为什么
- 如何使用Canny到32位灰度
- 64位VC 程序似乎在32位模式下运行
- C++ - 32位保护模式
- 生成32位、64位和128位的交织位模式(morton密钥)