我们正在为将在汽车硬件上运行的软件组件开发一个测试模拟器(在Windows环境中,使用C语言)。实际上,测试模拟器是一个Windows应用程序,它包含作为核心源的sw组件,并允许测试核心的I / O接口,并以这种方式正确行为。不幸的是,核心内部定义了与同名windows函数冲突的GetSystemTime函数:
[core] returnType GetSystemsTime(UInt32* time)
[windows] WINBASEAPI VOID WINAPI GetSystemTime (LPSYSTEMTIME lpSystemTime)
无法修改核心功能,作为组件I / O接口的一部分。我已经读过#define技巧,我已经应用了一个新的核心函数GetSystemsTime:
#define GetSystemTime(x) GetSystemsTime(x)
但是这个技巧还不够,它允许将项目的所有函数调用重定向到新函数,但是如果我没有注释掉windows原型我就会发生冲突。我该怎么办? THX !!
答案 0 :(得分:2)
实际上,测试模拟器是一个Windows应用程序,其中包含sw组件......
作为核心源
这可能不是一个完美的解决方案,我甚至不确定它是否有效,但是:
不要将源代码包含在测试应用程序中。只链接已编译的模块(但假设是这种情况)。
不要在组件中包含Windows标头。
仅在测试应用程序中包含您需要的组件标题,或者甚至只使用您需要的东西(原型)创建单独的包含文件进行测试。
在链接描述文件中,定义库的顺序。
前三点应确保组件源代码中没有Windows原型,因此不存在冲突。
最后一点,您可以确保在Windows运行之前首先找到您的功能。
如果在组件和测试应用程序中使用GetSystemsTime
,则存在冲突,您必须调整要测试的模块的来源。如果你愿意与设计师协调,那就最好。