2011-04-19 101 views
1

我的程序有幾個模塊是dll。 而其中一個DLL應該通過一些數據通知其他人。 你會做什麼?什麼是與DLL互相溝通的最佳方式

使用共享內存映射和事件? 或給他們一個回調函數和程序中繼(exe)?

請讓我知道一般的方法。

回答

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中刪除數據可能變得不可能,但添加新數據仍然可以正常工作。

1

如果所有的DLL都加載到同一個線程中,您應該可以調用DLL的導出函數,就像調用其他函數一樣。如果每個模塊都在不同的線程中運行,那麼可以使用帶信號量,互斥鎖和關鍵部分的標準鎖定技術,或帶有內存障礙的原子操作。如果每個模塊都在自己的進程中運行,請查找進程間通信技術(如命名管道)或通過本地主機通過網絡堆棧進行連接。

從DLL加載函數並不意味着什麼特別的事實。如果您要嘗試通過DLL屏障捕獲異常,則可能會產生唯一的複雜情況,get complicated

相關問題