※ 引述《PythonScript (Python)》之銘言:
: 手上有個第三方 MFC 主程式 可以寫 .dll 的 plugin 檔
: 主程式會自動載入變成按鈕
: 第三方程式有個 class A 因為缺了一些屬性
: 所以在第一個 plugin 中寫了 class B : class A
: 加了一些屬性 最後產生了一個 vector<class B>
: 現在的問題是 第二個 plugin 需要那一個 vector<class B>
: 但是這個兩個 .dll 檔又是獨立的
: 請問有什麼好方法嗎?
: 還是寫一個 plugin 開出來的是 dialog
: dialog 裡面再自行去加按鈕
: 這樣是不是比較有機會可以交換資料
: 謝謝
來來回回看了好幾次 還是覺得條件不夠 也不知道你想幹嘛 = =
我覺得這有幾個問題你應該先解釋清楚啦
1. 第三方MFC的plugin機制提供哪些功能?
我在猜啦,應該是讓你繼承特定的class 依照他的framework給定特定class的物件實體
達到你所說的自動新增按鈕
我會想問的是
這個plugin能夠知道主程式的哪些訊息?又能對主程式做哪些操作?能觸發哪些事件?
2. 你想做的事情是什麼?
從你前半段的描述 我聽起來是想要共用一個vector實例
但你後半段又說加按鈕 所以我在想class B應該是按鈕的derived class?
然後你想共用vector的原因只是因為想push_back(B())這樣? = =a
你原文講"產生vector<B>" 那到底是plugin持有
還是主程式實例化UI所call的function回傳值?
你要交換的資料是什麼? 資料交換完是誰進行作業?
(總不可能無聊到只是為了來回更新vector<B>吧)
所以說 不明的部分太多了 解法也會隨主程式API設計而變
我覺得你乾脆把程式碼改一改貼上來比較實在
我先從最蠢的可能解 講到最簡單的解
1. plugin開出socket讓其他plugin去呼叫 超級無敵複雜
全公司只有你能維護 不可取代性up up
2. 假設主程式可以query UI的widget
其實你直接做強制轉型 讓plugin開出可以干涉該vector的method就好了
上面幾個解法主要幾個點
a) 持有vector<B>的人才應該去對vector<B>做實際的操作
其他人應當透過class介面間接地存取資料
b) 從設計觀點來看兩個plugin彼此認識的確很奇怪
但實務上的確可能會有這種鬼設計
問題是plugin彼此如何認識(透過主程式query? 透過全局的metaobject?)
而且這個命題會有plugin載入先後順序的差別
c) vector會有ABI問題的話 那為什麼class B不會
c通常如果是自家公司都用同編譯同環境同版本那是沒差
但是如果你的class B真的可以簡單描述的話 我會建議解法 3
3. 最無腦也是最好懂的做法 其實是你透過檔案系統來操作
直接在APP專門的資料夾依時間為檔名做存讀 需要監聽大不了做個timer觸發
我是覺得你要解決的問題 搞不好根本不需要plugin彼此認識或分享變數
或者你的主程式的plugin能提供的機制比你想像的強