我正在尝试使用 Visual Studio 2010 将现有的 c++ 32 代码迁移到 windows7 上的 64 代码。我以前从未做过 64 位编译。在 Internet 参考资料的帮助下,我完成了 64 位编译的设置。比如带有 64 位编译器的 VS2010 等以及其他配置更改。在预处理器中,我删除了 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 吗?我试图通过评论这个包含,但我得到了代码中使用的 HANDLE 其他错误。如果我去WIN32定义VS2010指向windef.h文件中的定义。此文件存在于 Microsoft SDKs\windows\v7.0A\include 文件夹中,即不是我的本地代码。作为参考,下面给出了定义。
#ifndef WIN32
#define WIN32
#endif
所以我想知道为什么编译器同时获得预处理器 WIN32 和 WIN64。
在此先感谢您的帮助。