2012-04-13 136 views
-1

我正试图将现有的C++ 32代码迁移到windows7上的64位代码与visual studio 2010.我以前从未做过64位编译。在互联网引用的帮助下,我做了64位编译的设置。像VS2010与64位编译器等,并进行其他配置更改。 在预处理器中,我删除了WIN32并添加了WIN64。我有一些其他预处理器,如OS_WIN_32和其他一些在我的代码中特定的处理器。 在WIN32正在使用的代码中,我添加了额外的条件。 WIN64这只是为了确保应用程序应该与win32以及win64一起编译。 当我试图编译我得到的编译错误说在64位上迁移32位应用程序的问题

致命错误C1189代码:应该定义

此错误是由本地代码来只有WIN32和WIN64标志之一:#ERROR我们检查是否定义了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。

在此先感谢您的帮助。

+0

尝试一下 “上的64位C/C++应用开发经验” - http://www.viva64.com/en/l/和“使用_WIN64/WIN64宏” - http://www.viva64.com/en/k/0040/ – 2012-04-19 17:27:29

回答

6

你不应该自己定义。应该用来检查此宏的是

_WIN32 // always defined for Windows apps 
_WIN64 // only defined for x64 compilation 

这些编译器定义(见here)。

通常情况下,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 
+0

我不确定我是否理解你的解释。但我没有添加_WIN64。我添加了WIN64,因为现有代码使用的是WIN32(都没有下划线),即使windef.h文件中的WIN32定义也来自Microsoft SDK。 如果我误解了你的解释,请你详细解释一下。对造成的不便表示歉意。谢谢 – novice 2012-04-13 08:56:59

+0

@novice see edit。 – rubenvb 2012-04-13 09:17:09

+0

读取游初始应答后叶我编辑如下所示 的#if定义_WIN32代码&&定义_WIN64 #ERROR只有WIN32和WIN64符号中的一个应该被定义 #ENDIF 仍然我得到了同样的错误。在看到您编辑的响应之后还有一个查询是x64代码总是会定义_WIN32和_WIN64。这种理解是否正确?如果是的话,那么在定义这两个代码时,让代码抛出错误并不是正确的编码。这是正确的吗? – novice 2012-04-13 09:38:40

相关问题