我正在研究在Linux上运行20多年的遗留代码。 它有3个模块,由3个不同的人处理。我只能在一个模块中更改。
现在我有一项任务是在Windows中以最小的功能构建相同的代码。
对于进程间通信,使用消息结构。它与Windows MSG结构相冲突。
此结构也在其他两个模块中使用。
我不想重命名结构。 有没有其他方法可以解决这个问题?
代码是C和C ++的混合。
答案 0 :(得分:2)
不是真的。 “一个定义规则”规定每个名称都应具有唯一的定义,并且您::MSG
的现有定义与<Windows.h>
的{{1}}定义不匹配。
Windows编译器不会大量强制执行ODR,因此您可能会放弃它。你通常会通过两种类型之间的硬分离来做到这一点。也就是说,在包含::MSG
的.cpp文件中,您不能包含任何项目标题,反之亦然。两个部分之间的接口必须在它自己的头文件中定义,它既不依赖于windows.h,也不依赖于你自己的头文件。 (作为附带好处,您可以为Linux提供该.cpp文件的替代实现,这意味着您的代码不会充满windows.h
)