Re: [問題] dll 之間傳遞 vector<class>

看板C_and_CPP作者 (阿ㄆㄧㄚˇ)時間5年前 (2019/09/10 22:35), 編輯推噓1(100)
留言1則, 1人參與, 5年前最新討論串2/2 (看更多)
※ 引述《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能提供的機制比你想像的強 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.120.9 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1568154912.A.466.html

09/12 17:52, 5年前 , 1F
拍謝 等我可以更好的描述問題再來請教
09/12 17:52, 1F
文章代碼(AID): #1TU2KWHc (C_and_CPP)
文章代碼(AID): #1TU2KWHc (C_and_CPP)