我的程序有幾個模塊是dll。 而其中一個DLL應該通過一些數據通知其他人。 你會做什麼?什麼是與DLL互相溝通的最佳方式
使用共享內存映射和事件? 或給他們一個回調函數和程序中繼(exe)?
請讓我知道一般的方法。
我的程序有幾個模塊是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。