我编写了一个将我的DLL绑定到Windows Hooks的C ++ exe文件,它需要将DLL的实例注入每个进程。因此,您可以随时拥有1个exe,以及1个或更多DLL实例。
我知道在DLL中你可以使用#pragma data_seg(...)
和链接器注释来共享DLL之间的数据,但需要注意的是,由于显而易见的原因(动态内存地址,指针偏移等),你可能不会以这种方式共享指针。 / p>
但是,我可能会朝相反方向前进吗?也就是说,在exes中有一个DLL可以调用的回调函数?理论上说如果我可以在exe的内存中将此函数位置定义为“固定”,那么任何DLL实例都可以安全地调用它吗?
这可能吗?我担心这种方法的exe级别太低了。
如果没有,我可以使用任何机制在多个DLL实例之间共享一个回调函数吗?
非常感谢
答案 0 :(得分:3)
不,您不能将函数指针放入共享段。您仍然会跨进程边界访问进程本地内存地址,但这并不好。
您可以做的是让EXE将其拥有的HWND
置于共享段中。可以跨进程边界共享HWND
。这样,DLL的多个实例可以在需要时向该HWND发送消息,并且EXE可以按照它认为合适的方式处理这些消息。