首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C++中重写windows系统函数

如何在C++中重写windows系统函数
EN

Stack Overflow用户
提问于 2018-02-26 21:18:01
回答 2查看 195关注 0票数 1

我们正在为一个将在汽车硬件上运行的软件组件开发一个测试模拟器(在windows环境中,使用C语言)。实际上,测试模拟器是一个windows应用程序,它包括作为核心源的sw组件,并允许测试核的I/O接口,并以这种方式测试其正确的行为。不幸的是,在内核中定义了函数GetSystemTime,这会导致与同名的windows函数发生冲突:

代码语言:javascript
复制
[core] returnType GetSystemsTime(UInt32* time)
[windows] WINBASEAPI VOID WINAPI GetSystemTime (LPSYSTEMTIME lpSystemTime)

作为组件I/O接口的一部分,不能修改核心函数。我读过#define技巧,我已经应用了引入一个新的核心函数GetSystemsTime:

代码语言:javascript
复制
#define GetSystemTime(x) GetSystemsTime(x)

但是这个技巧是不够的,它允许将项目的所有函数调用重定向到新函数,但是如果我不注释掉windows原型,我就会有冲突。我该怎么做?谢谢!!

EN

回答 2

Stack Overflow用户

发布于 2018-02-26 21:32:23

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

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

  1. 不会将源代码包含到测试应用程序中。只需链接已编译的模块(但假设是这种情况)。
  2. 不在components.
  3. Include中包含Windows头文件,只在测试应用程序中包含您需要的组件头文件,甚至创建一个单独的包含文件,用于仅使用您需要的内容(原型)进行测试。
  4. 在链接器脚本中,定义库的顺序。

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

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

如果在组件和测试应用程序中使用GetSystemsTime,就会有冲突,必须调整要测试的模块的源代码。最好是你能和设计者协调一下。

票数 2
EN

Stack Overflow用户

发布于 2018-02-26 21:57:37

Windows GetSystemTime是目前通常扩展为GetSystemTimeW的宏。

你能在包含Windows头文件之后,但在包含组件的头文件之前使用#undefine GetSystemTime吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48989495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档