如何在C语言中重写windows系统函数
我们正在为将在汽车硬件上运行的软件组件开发一个测试模拟器(在windows环境中,使用C语言)。实际上,测试模拟器是一个windows应用程序,它包括作为核心源的sw组件M,并允许测试核心的I/O接口及其正确行为。不幸的是,内核中定义了函数GetSystemTime,该函数与同名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 (
[core] returnType GetSystemsTime(UInt32* time)
[windows] WINBASEAPI VOID WINAPI GetSystemTime (LPSYSTEMTIME lpSystemTime)
不可能修改作为组件I/O接口一部分的核心功能。我已经读到了#define技巧,我应用它引入了一个新的核心函数GetSystemsTime:
#define GetSystemTime(x) GetSystemsTime(x)
但是这个技巧是不够的,它允许将项目的所有函数调用重定向到新函数,但是如果我不注释掉windows原型,我就有冲突。我该怎么办?
谢谢
实际上,测试模拟器是一个windows应用程序,包括作为核心源的软件组件
这可能不是一个完美的解决方案,我甚至不确定它是否有效,但是:
如果在组件和测试应用程序中使用
GetSystemsTime
,则存在冲突,必须调整要测试的模块的源。如果你能与设计师协调,那就最好了。WindowsGetSystemTime
是一个宏,现在通常扩展到GetSystemTimeW
是否可以在包含Windows头文件之后,但在包含组件头文件之前,取消定义GetSystemTime?
returnType GetSystemsTime(UInt32*time)
这来自汽车软件?家酿的类型和没有常数的正确性。代码质量在哪里?米斯拉-C在哪里?像这样的东西让我真的很害怕汽车。然后他们让人为此编写一个完整的Windows测试界面?我可以通过查看一个原型来节省您的工作量。结论:最初的代码99%肯定是废话。因此,应该把资源花在开发汽车软件上,而不是编写模拟器上。请随时将此转发给您的上司。