与DLL相互通信的最佳方式是什么

时间:2011-04-19 02:48:21

标签: c++ dll

我的程序有几个dll模块。 其中一个dll应该通过一些数据通知其他人。 你会做什么?

使用共享内存映射和事件? 或者给他们一个回调函数和中继程序(exe)?

请让我知道一般方法。

2 个答案:

答案 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中删除数据可能变得不可能,但添加新数据仍然可以正常工作。