Windows MSG 结构与旧项目代码结构 MSG 冲突

Windows MSG structure conflicts with legacy project code struct MSG

本文关键字:MSG 结构 代码 冲突 项目 Windows      更新时间:2023-10-16

我正在研究一个在Linux上运行了20多年的遗留代码。它有3个模块,由3个不同的人处理。我只能在一个模块中更改。

现在我有一个任务,即在功能最少的窗口中构建相同的代码。

对于进程间通信,使用消息结构。它与Windows MSG结构冲突。

这种结构也用于其他两个模块。

我不想重命名结构。还有其他方法可以解决这个问题吗?

代码是 C 和 C++ 的混合。

不是真的。一个定义规则指出,每个名称都应具有唯一的定义,并且您现有的::MSG定义与::MSG<Windows.h>定义不匹配。

Windows编译器不倾向于严格执行ODR,因此您可能会侥幸逃脱。通常,您可以通过在两种类型之间进行硬分离来执行此操作。也就是说,在包含 windows.h 的.cpp文件中,您不能包含任何项目标题,反之亦然。这两个部分之间的接口必须在其自己的标头中定义,该标头既不依赖于 windows.h 也不依赖于您自己的标头。(作为附带的好处,您可以为 Linux 提供该.cpp文件的替代实现,这意味着您的代码不会充斥着#ifdef WIN32