Windows MSG结构与遗留项目代码结构MSG冲突

时间:2017-01-04 05:42:18

标签: c++ c

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

现在我有一项任务是在Windows中以最小的功能构建相同的代码。

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

此结构也在其他两个模块中使用。

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

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

1 个答案:

答案 0 :(得分:2)

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

Windows编译器不会大量强制执行ODR,因此您可能会放弃它。你通常会通过两种类型之间的硬分离来做到这一点。也就是说,在包含::MSG的.cpp文件中,您不能包含任何项目标题,反之亦然。两个部分之间的接口必须在它自己的头文件中定义,它既不依赖于windows.h,也不依赖于你自己的头文件。 (作为附带好处,您可以为Linux提供该.cpp文件的替代实现,这意味着您的代码不会充满windows.h