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

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

问题描述:

我的程序有几个模块是dll。 而其中一个DLL应该通过一些数据通知其他人。 你会做什么?什么是与DLL互相沟通的最佳方式

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

请让我知道一般的方法。

这里是一个不错的把戏模块之间的通信:

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

如果所有的DLL都加载到同一个线程中,您应该可以调用DLL的导出函数,就像调用其他函数一样。如果每个模块都在不同的线程中运行,那么可以使用带信号量,互斥锁和关键部分的标准锁定技术,或带有内存障碍的原子操作。如果每个模块都在自己的进程中运行,请查找进程间通信技术(如命名管道)或通过本地主机通过网络堆栈进行连接。

从DLL加载函数并不意味着什么特别的事实。如果您要尝试通过DLL屏障捕获异常,则可能会产生唯一的复杂情况,get complicated