gpt4 book ai didi

c++ - 在 DLL 实例之间的 exe 中使用回调

转载 作者:行者123 更新时间:2023-11-28 00:27:18 25 4
gpt4 key购买 nike

我编写了一个 C++ exe,将我的 DLL 绑定(bind)到 Windows Hooks,这需要将 DLL 的一个实例注入(inject)到每个进程中。因此,您随时拥有 1 个 exe 和 1 个或多个 DLL 实例。

我知道在 DLL 中您可以使用 #pragma data_seg(...) 和链接器注释在 DLL 之间共享数据,但需要注意的是您不能以这种方式共享指针,原因很明显(动态内存地址、指针偏移等)

但是,我可以朝相反的方向前进吗?也就是说,在 DLL 可以调用的 exe 中有一个回调函数?理论是,如果我可以在 exe 的内存中将此函数位置定义为“固定”,那么任何 DLL 实例调用它应该是安全的?

这可能吗?对于这种方法,我担心 exe 级别太低。

如果没有,是否可以使用任何机制在多个 DLL 实例之间共享单个回调函数?

非常感谢

最佳答案

不,您不能将函数指针放入共享段。您仍然会跨进程边界访问进程本地内存地址,这并不好。

您可以做的是让 EXE 将它拥有的 HWND 放入共享段。 HWND 可以跨进程边界共享。这样,DLL 的多个实例可以在需要时向该 HWND 发送消息,并且 EXE 可以按其认为合适的方式处理这些消息。

关于c++ - 在 DLL 实例之间的 exe 中使用回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24363445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com