如何在C中覆盖Windows系统功能

时间:2018-02-26 13:18:01

标签: c windows function-overriding

我们正在为将在汽车硬件上运行的软件组件开发一个测试模拟器(在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 !!

1 个答案:

答案 0 :(得分:2)

  

实际上,测试模拟器是一个Windows应用程序,其中包含sw组件......

作为核心源

这可能不是一个完美的解决方案,我甚至不确定它是否有效,但是:

  1. 不要将源代码包含在测试应用程序中。只链接已编译的模块(但假设是这种情况)。

  2. 不要在组件中包含Windows标头。

  3. 仅在测试应用程序中包含您需要的组件标题,或者甚至只使用您需要的东西(原型)创建单独的包含文件进行测试。

  4. 在链接描述文件中,定义库的顺序。

  5. 前三点应确保组件源代码中没有Windows原型,因此不存在冲突。

    最后一点,您可以确保在Windows运行之前首先找到您的功能。

    如果在组件和测试应用程序中使用GetSystemsTime,则存在冲突,您必须调整要测试的模块的来源。如果你愿意与设计师协调,那就最好。