我们正在为一个将在汽车硬件上运行的软件组件开发一个测试模拟器(在windows环境中,使用C语言)。实际上,测试模拟器是一个windows应用程序,它包括作为核心源的sw组件,并允许测试核的I/O接口,并以这种方式测试其正确的行为。不幸的是,在内核中定义了函数GetSystemTime,这会导致与同名的windows函数发生冲突:
[core] returnType GetSystemsTime(UInt32* time)
[windows] WINBASEAPI VOID WINAPI GetSystemTime (LPSYSTEMTIME lpSystemTime)作为组件I/O接口的一部分,不能修改核心函数。我读过#define技巧,我已经应用了引入一个新的核心函数GetSystemsTime:
#define GetSystemTime(x) GetSystemsTime(x)但是这个技巧是不够的,它允许将项目的所有函数调用重定向到新函数,但是如果我不注释掉windows原型,我就会有冲突。我该怎么做?谢谢!!
发布于 2018-02-26 21:32:23
实际上测试模拟器是一个windows应用程序,它包含作为核心源的软件组件……
这可能不是完美的解决方案,我甚至不确定它是否有效,但是:
前三点应该确保您的组件源代码中没有windows原型,因此不会有冲突。
使用最后一点,您可以确保在Windows函数之前首先找到您的函数。
如果在组件和测试应用程序中使用GetSystemsTime,就会有冲突,必须调整要测试的模块的源代码。最好是你能和设计者协调一下。
发布于 2018-02-26 21:57:37
Windows GetSystemTime是目前通常扩展为GetSystemTimeW的宏。
你能在包含Windows头文件之后,但在包含组件的头文件之前使用#undefine GetSystemTime吗?
https://stackoverflow.com/questions/48989495
复制相似问题