包括minwindef.h后的BOOL重新定义

Ami*_*avi 1 c c++ visual-c++

我是C/C++的新手,以防万一:)我克隆了一个用C语言编写的旧协议栈解决方案,其中一个C++主类将其导入VS(Visual C++ 2017 v 15.9.5,目标是Windows SDK 10.0.17134.0)它正确编译和工作.

现在制作了一个C++解决方案(windows控制台应用程序)创建了一个文件夹lib副本,粘贴了所有这些.h.c文件,lib添加到路径中additional include directories以及链接器中additional library directories.

构建解决方案抛出错误的音调.我现在要解决的问题是:

其中一个头文件包含类型定义

typedef uint8_t U8;
#ifndef BOOL
typedef U8 BOOL;
#endif
Run Code Online (Sandbox Code Playgroud)

但这与minwindef.hWindows套件相冲突.虽然我#include types.h得到C2371 'BOOL': redefinition; different basic types 了整个解决方案,但我想使用BOOL此标头中定义的所有其他定义.

我该如何解决这个问题?或者一般情况下,如果在C++项目中使用C代码,我应该遵循哪些设置和MACRO(例如方法中的extern"C")

Lig*_*ica 5

我对你想要使用的图书馆一无所知,因为你没有告诉我们它是什么.但我可以做一些猜测:

  1. 该代码根本不用于与Windows代码接口;
  2. 通过创建Windows C++应用程序,您添加了Windows依赖项;
  3. Windows依赖项(众所周知用于使用短名称中毒命名空间BOOL)与库的代码(BOOL在定义时对其宏执行相同的操作BOOL,否则与其类型别名相同)发生冲突.

这与C vs C++或类似的东西没有什么关系,并且你无法做出一般修复.您可以尝试摆脱Windows依赖关系(您的任务需要该标题吗?)或者您可以修补您的库不要触摸BOOL(确保Windows BOOL是您需要的).

并将此作为一个不污染命名空间的好教训!