在 64 位上迁移 32 位应用程序时出现问题
problems in migrating 32bit application on 64 bit
我正在尝试使用 Visual Studio 2010 将现有的 c++ 32 代码迁移到 Windows7 上的 64 代码。 在互联网参考的帮助下,我完成了64位编译的设置。 如VS2010与64位编译器等和其他配置更改。在预处理器中,我删除了 WIN32 并添加了 WIN64。我还有一些其他的预处理器,如OS_WIN_32和其他一些在我的代码中特定的预处理器。在使用 WIN32 的代码中,我添加了额外的条件为 ||WIN64 这只是为了确保应用程序应该使用 win32 和 win64 进行编译。当我尝试编译代码时,我收到编译错误,说
致命错误 C1189:#error:只应定义 WIN32 和 WIN64 符号之一
此错误来自本地代码,我们在其中检查是否同时定义了 WIN32 和 WIN64。 该代码如下所示。
#if defined WIN32 && defined WIN64
# error Only one of the WIN32 and WIN64 symbols should be defined
#endif
在VS2010中,如果未启用宏,则宏中的代码将灰显。 在我的代码中,上述错误也显示为灰色。 但我仍然收到该错误。
我添加 WIN64 的代码包括 windows.h. 供参考,如下所示。
#if defined WIN32 || defined WIN64
#include <windows.h>
#include <process.h>
#endif
所以我的问题是为什么我会收到此错误? 我们不应该为64位编译添加Windows.h吗? 我尝试通过评论此包含来评论此包含,但是我遇到了代码中使用的其他错误wrt HANDLE。如果我转到WIN32定义,VS2010指向windef.h文件中的定义。此文件存在于Microsoft SDK\windows\v7.0A\include 文件夹中,即不是我的本地代码。作为参考,该定义如下。
#ifndef WIN32
#define WIN32
#endif
所以我想知道为什么编译器同时获得预处理器 WIN32 和 WIN64。
提前感谢您的帮助。
你不应该自己定义。应该用于检查这一点的宏是
_WIN32 // always defined for Windows apps
_WIN64 // only defined for x64 compilation
这些由编译器定义(请参阅此处)。
通常,IDE 会将不带前缀的宏添加到命令行中,以免使用未记录的无前缀版本的旧项目无法生成。当存在记录在案的替代方案时,它们工作的事实并不是使用它们的理由。
它归结为:
#ifdef _WIN32
// We're on Windows, yay!
#ifdef _WIN64
// We're on x64! Yay!
#else // _WIN64
// We're on x86 (or perhaps IA64, but that one doesn't matter anymore). Yay!
#endif // _WIN64
#else // _WIN32
// We're not on Windows, maybe WindowsCE or WindowsPhone stuff, otherwise some other platform
#endif
- 将应用程序从32位移植到64位时出现问题
- 覆盖应用程序的低级别键盘挂钩问题
- Android因为权限问题而杀死Qt应用程序
- 通过 COM 对象连接 x64 应用程序时出现问题
- C# 的垃圾回收会给实时音频应用程序带来问题吗?
- 需要有关在qt c ++应用程序中使用崩溃问题的建议
- 将文件从 iOS 应用程序加载到 C++ 对象中/<iostream>iOS 上的问题
- 在跨平台桌面/移动应用程序套件中使用 ZeroMQ 来解决架构问题
- opengl 飞行模拟器应用程序中的文本呈现问题
- 按名称问题获取卸载应用程序路径
- 使用 OpenSSL 运行应用程序时出现问题
- Visual Studio 中的 Hello World C++ 应用程序 - 关于预编译标头不同的问题
- 获取应用程序图标时出现问题
- QML&C++应用程序中的绑定循环问题
- Android OpenCV 应用程序的内存问题
- 在Mac OS上编译Halide的camera_pipe应用程序时出现问题
- 我如何利用核心文件在C/C 中找到应用程序问题
- 关于堆和堆栈应用程序问题
- 使用链接linux编译GLFW应用程序问题
- mfcc++托盘应用程序问题