如何在C语言中重写windows系统函数

如何在C语言中重写windows系统函数,c,windows,overriding,C,Windows,Overriding,我们正在为将在汽车硬件上运行的软件组件开发一个测试模拟器(在windows环境中,使用C语言)。实际上,测试模拟器是一个windows应用程序,它包括作为核心源的sw组件M,并允许测试核心的I/O接口及其正确行为。不幸的是,内核中定义了函数GetSystemTime,该函数与同名windows函数发生冲突: [core] returnType GetSystemsTime(UInt32* time) [windows] WINBASEAPI VOID WINAPI GetSystemTime (

我们正在为将在汽车硬件上运行的软件组件开发一个测试模拟器(在windows环境中,使用C语言)。实际上,测试模拟器是一个windows应用程序,它包括作为核心源的sw组件M,并允许测试核心的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原型,我就有冲突。我该怎么办? 谢谢

实际上,测试模拟器是一个windows应用程序,包括作为核心源的软件组件

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

  • 不要将源代码包含到测试应用程序中。只需链接已编译的模块(但假设情况就是这样)

  • 不要在组件中包含windows标题

  • 在测试应用程序中只包含您需要的组件头,或者甚至创建一个单独的包含文件,以便只使用您需要的东西(原型)进行测试

  • 在链接器脚本中,定义库的顺序

  • 前三点应该确保组件源代码中没有windows原型,因此不会有冲突

    使用最后一点,您可以确保在Windows函数之前先找到您的函数


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

    Windows
    GetSystemTime
    是一个宏,现在通常扩展到
    GetSystemTimeW


    是否可以在包含Windows头文件之后,但在包含组件头文件之前,取消定义GetSystemTime?

    returnType GetSystemsTime(UInt32*time)
    这来自汽车软件?家酿的类型和没有常数的正确性。代码质量在哪里?米斯拉-C在哪里?像这样的东西让我真的很害怕汽车。然后他们让人为此编写一个完整的Windows测试界面?我可以通过查看一个原型来节省您的工作量。结论:最初的代码99%肯定是废话。因此,应该把资源花在开发汽车软件上,而不是编写模拟器上。请随时将此转发给您的上司。