学习插件架构(二)

许文君 2013-08-23 06:10:46
加精
第一篇地址在这里:

http://blog.csdn.net/xuddk727/article/details/10076409

感谢所有朋友的支持,也感谢很多提出宝贵意见的朋友。

首先回答一下第一篇为什么不用COM。笔者打算挖个大坑写个系列文章,所以就从笔者认为最早的插件架构方式说起。

第二,关于标题,为什么说是学习插件架构。在这系列文章中,最后结果不会是一个完整的架构,因为行业千差万别,细节设计就完全不同。这系列文章只是一个笔者认为在插件架构中所需要思考问题以及相应解决方案的罗列。当然,限于笔者水平,方案肯定不会是最好的,其中也许会有许多错误,欢迎大家指正。其中一些方案包括各种数据类型的交互、多语言支持,笔者仅实现个简单的方案,作为开放性的话题,也欢迎大家参与。

所有代码,笔者仅会以实现最基础功能为原则的方式呈现给大家,因此是随着文章走,欢迎大家提出尖锐批评:)。








为什么用COM:笔者所在单位的产品研发中心仅有二三十号人,而其他部门会C#、JAVA的则有数百人,众所周知招聘C++人员的困难,因此支持多语言是势在必行。用C接口也是可以的,但是很多需要自己去实现,工作量就非常庞大了。唔,其实是我不会C#......

言归正传,原理性的不讲,对COM若是不熟悉的朋友可以去VC知识库看下杨老师的教程。本次教程仍然只是简单的展示一种COM编写插件的方式,涉及数据共享以及消息传递将在下一篇中体现。

我们将思路整理一下,整个流程大概是这样: 枚举并加载所有符合的插件-》根据对应的命令找到并调用该插件-》结束时卸载所有插件。于是我们做出如下设计:

一个插件的运行时(即插件管理类),它负责加载、调用以及卸载插件(对应PluginMgr工程)。

一个exe空框架,由它搭载插件的运行时。

若干插件,等待被调用。



其中涉及的知识点,第一个如何去枚举所有符合类型的插件?COM本身提供了一种叫CATEGORY的东西,通过它我们可以很方便的枚举所有的插件。详细可以到VC知识库了解:

http://www.vckbase.com/index.php/wv/159.html

C++中通过继承可以很方便的实现扩展,而ATL中可以通过实现接口来完成。示例代码中插件通过实现IPluginObject 接口完成了继承的工作,由此让运行时中IPluginAppMgr只需要调用IPluginObject接口就可以调用所有插件了。由于不涉及数据共享以及消息传递,因此IPluginObject我只是做了简单的设计,仍然模仿第一节,只包含了获取模块名称以及执行两个接口。这里插一点个人意见:我认为成熟的插件本身应该包含加载时初始化,卸载,执行以及交互等,考验大家设计能力的时候到了:)。

PS:由于时间比较赶,并未做多少介绍,只是将一些简单的知识点通过链接奉送给大家,大家将就着看吧,抱歉。

源代码地址;

http://download.csdn.net/detail/xuddk727/6000759
...全文
4523 101 打赏 收藏 转发到动态 举报
写回复
用AI写文章
101 条回复
切换为时间正序
请发表友善的回复…
发表回复
itachi777 2013-11-17
  • 打赏
  • 举报
回复
学习了,谢谢
JYSML 2013-09-29
  • 打赏
  • 举报
回复
强烈支持。。
net_lyc 2013-09-04
  • 打赏
  • 举报
回复
新人,混个脸熟!
并刀如水 2013-09-04
  • 打赏
  • 举报
回复
楼主写的确实不错,顶了,最近我在 http://gotomao.com 网站也学习了这方面的东西,而且都是免费的,也去看看吧~
narutowty 2013-09-04
  • 打赏
  • 举报
回复
很好的帖子,学习了
欢乐马_19e9 2013-09-03
  • 打赏
  • 举报
回复
菜鸟表示看不懂。
zhangyihu321 2013-09-02
  • 打赏
  • 举报
回复
膜拜中 学习了。。。
diecode 2013-09-02
  • 打赏
  • 举报
回复
支持一下.......
渴死的猪 2013-08-30
  • 打赏
  • 举报
回复
好贴啊,真是一届我心中多年夙愿
wxf041041 2013-08-29
  • 打赏
  • 举报
回复
使劲儿的顶楼主!
CodeC 2013-08-29
  • 打赏
  • 举报
回复
什么样的节奏才明了
fan87817 2013-08-28
  • 打赏
  • 举报
回复
学习了。。。。
chenzhwork 2013-08-28
  • 打赏
  • 举报
回复
强烈支持。。
MFWEB 2013-08-27
  • 打赏
  • 举报
回复
novabio 2013-08-27
  • 打赏
  • 举报
回复
承的工作,由此让运行时中IPluginAppMgr只需要调用IPluginObject接口就可以调用所有插件了。由于不涉及数据共享以及消息传递,因此IPluginObject我只是做了简单的设计,仍然模仿第一节,只包含了获取模块名称以及执行两个接口。这里插一点个人意见:我
如果恰恰 2013-08-26
  • 打赏
  • 举报
回复
强烈支持。。
许文君 2013-08-26
  • 打赏
  • 举报
回复
引用 54 楼 redui 的回复:
“笔者”已经落伍了,我相信楼主很久没有用过笔了(除了开会时装模作样地拿一个笔在记事本上随便画几下^_^) 老实承认吧,如果你用了键盘,你应该自称“键人”,如果用了手机等触摸屏,你应该自称“触生”。哈哈哈。。。
好吧
康斯坦汀 2013-08-26
  • 打赏
  • 举报
回复
引用 54 楼 redui 的回复:
“笔者”已经落伍了,我相信楼主很久没有用过笔了(除了开会时装模作样地拿一个笔在记事本上随便画几下^_^) 老实承认吧,如果你用了键盘,你应该自称“键人”,如果用了手机等触摸屏,你应该自称“触生”。哈哈哈。。。
redui 2013-08-26
  • 打赏
  • 举报
回复
“笔者”已经落伍了,我相信楼主很久没有用过笔了(除了开会时装模作样地拿一个笔在记事本上随便画几下^_^) 老实承认吧,如果你用了键盘,你应该自称“键人”,如果用了手机等触摸屏,你应该自称“触生”。哈哈哈。。。
满衣兄 2013-08-26
  • 打赏
  • 举报
回复
虽然不明白,但是好厉害
加载更多回复(36)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧