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

BOOL redefinition after including minwindef.h

本文关键字:定义 新定义 minwindef 后的 BOOL 包含      更新时间:2023-10-16

我是 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

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

我应该如何解决问题?或者一般来说,如果在项目中使用 C 代码C++我应该遵循哪些设置和宏(例如方法中的外部"C")

我对你尝试使用的库一无所知,因为你没有告诉我们它是什么。但我可以做一些猜测:

  1. 该代码根本没有用于与 Windows 代码交互;
  2. 通过创建 Windows C++ 应用程序,您已经添加了 Windows 依赖项;
  3. Windows 依赖项(以用 BOOL 等短名称毒害命名空间而闻名)与库的代码冲突(如果定义时,库的代码对其BOOL宏及其BOOL类型别名执行相同的操作,否则)。

这与 C 与 C++ 或类似的东西无关,并且您无法进行常规修复。你可以尝试摆脱Windows依赖关系(你的任务需要这个标题吗?),或者你可以修补你的库,不要碰BOOL(在确保Windows的BOOL是你需要的之后)。

并以此为一个很好的教训,不要污染命名空间!