我的程序有几个dll模块。 其中一个dll应该通过一些数据通知其他人。 你会做什么?
使用共享内存映射和事件? 或者给他们一个回调函数和中继程序(exe)?
请让我知道一般方法。
答案 0 :(得分:1)
如果将所有DLL加载到同一个线程中,您应该能够像调用任何其他DLL一样调用DLL的导出函数。如果每个模块都在不同的线程中运行,则可以使用基于标准锁的技术,包括信号量,互斥量和关键部分,或具有内存障碍的原子操作。如果每个模块都在其自己的进程中运行,请查找进程间通信技术,例如命名管道或通过localhost通过网络堆栈连接。
从DLL加载函数的事实并不意味着任何特殊的东西。如果您打算通过DLL屏障捕获异常,那么唯一的复杂因素就是get complicated。
答案 1 :(得分:0)
这是模块之间通信的一个很好的技巧:
struct A { int a; int b; };
void dll1(A &a);
void dll2(A &a);
int main() {
A a;
while(1) {
dll1(a);
dll2(a);
}
}
这会将整个dll1放到一个函数中。它可以通过修改结构A与其他dll通信。现在这将有一个问题,当你向系统添加新的dll时需要修改main()。当dll之间的通信接口发生变化时,还需要修改struct A.从结构A中删除数据可能变得不可能,但添加新数据仍然可以正常工作。