在64位上迁移32位应用程序时出现的问题 我试图用Visual Studio 2010将现有的C++ 32代码迁移到Wiels7上的64个代码。我以前从来没有做过64位编译。在internet参考的帮助下,我完成了64位编译的设置。如VS2010,带有64位编译器等和其他配置更改。 在预处理器中,我删除了WIN32并添加了WIN64。我有一些其他的预处理器,比如OS_WIN_32和一些其他的,在我的代码中是特定的。 在使用WIN32的代码中,我添加了额外的条件作为| | WIN64,这只是为了确保应用程序应使用WIN32和WIN64进行编译。 当我试图编译代码时,我得到的编译错误是

在64位上迁移32位应用程序时出现的问题 我试图用Visual Studio 2010将现有的C++ 32代码迁移到Wiels7上的64个代码。我以前从来没有做过64位编译。在internet参考的帮助下,我完成了64位编译的设置。如VS2010,带有64位编译器等和其他配置更改。 在预处理器中,我删除了WIN32并添加了WIN64。我有一些其他的预处理器,比如OS_WIN_32和一些其他的,在我的代码中是特定的。 在使用WIN32的代码中,我添加了额外的条件作为| | WIN64,这只是为了确保应用程序应使用WIN32和WIN64进行编译。 当我试图编译代码时,我得到的编译错误是,c++,32bit-64bit,C++,32bit 64bit,致命错误C1189:#错误:只应定义WIN32和WIN32 64符号中的一个 此错误来自本地代码,我们在本地代码中检查是否同时定义了WIN32和WIN32 64。该代码如下所示 #if defined WIN32 && defined WIN64 # error Only one of the WIN32 and WIN64 symbols should be defined #endif 在VS2010中,如果未启用宏,则宏中的代码将变灰。在我的代码中,上面的错误也是灰色的。

致命错误C1189:#错误:只应定义WIN32和WIN32 64符号中的一个

此错误来自本地代码,我们在本地代码中检查是否同时定义了WIN32和WIN32 64。该代码如下所示

#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
所以我想知道为什么编译器同时使用预处理器WIN32和WIN32 64


提前感谢您的帮助。

您不应该给自己下定义。应用于检查此项的宏是

_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

你不应该给自己下定义。应用于检查此项的宏是

_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

我不知道我是否理解你的解释。但我没有添加_WIN64。我添加了WIN64,因为现有代码使用的是WIN32(两者都没有下划线),甚至windef.h文件中的WIN32定义也来自Microsoft SDK。如果我误解了你的解释,你能详细解释一下吗。很抱歉给您带来不便。谢谢阅读了教程的初始答案后,我编辑了如下所示的代码#如果已定义#u WIN32&&defined#u WIN64#错误-如果我仍然得到相同的错误,则只应定义WIN32和WIN64符号中的一个#End。另外,在看到您编辑的响应后,还有一个查询是x64代码将始终定义_WIN32和_WIN64。这种理解正确吗?如果是,则在定义了这两个错误时,让代码抛出错误不是正确的编码。这是对的吗?事实上,抛出错误的代码来自第三方库(递归软件的ospace),我不确定他们为什么要检查dnt _WIN32。我不确定我是否理解您的解释。但我没有添加_WIN64。我添加了WIN64,因为现有代码使用的是WIN32(两者都没有下划线),甚至windef.h文件中的WIN32定义也来自Microsoft SDK。如果我误解了你的解释,你能详细解释一下吗。很抱歉给您带来不便。谢谢阅读了教程的初始答案后,我编辑了如下所示的代码#如果已定义#u WIN32&&defined#u WIN64#错误-如果我仍然得到相同的错误,则只应定义WIN32和WIN64符号中的一个#End。另外,在看到您编辑的响应后,还有一个查询是x64代码将始终定义_WIN32和_WIN64。这种理解正确吗?如果是,则在定义了这两个错误时,让代码抛出错误不是正确的编码。这是对的吗?事实上,抛出错误的代码来自第三方库(递归软件的ospace),我不确定他们为什么要检查“WIN32.Try look”64位C/C++应用程序开发课程“使用WIN64/WIN64宏”-Try look“Try look”64位C/C++应用程序开发课程”-以及“使用_WIN64/WIN64宏”-