※ 引述《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能提供的机制比你想像的强