学习插件架构(二)

第一篇地址在这里:

     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

猜你喜欢

转载自blog.csdn.net/xuddk727/article/details/10236375