如何用VC2005 express开发插件系统?

zhangyaoqi_17 2008-10-09 10:57:12
需要做一个插件管理器,类似photoshop里面那种,哪位大侠做过或者是有相关资料啊?
我在网上找了找,大部分都是用MFC。有没有能用vc2005、2008express开发的资料?
或者有开源库也行,就像
http://www.codeguru.com/cpp/misc/misc/plug-insadd-ins/article.php/c7159/
...全文
209 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
clever101 2009-09-25
  • 打赏
  • 举报
回复
先做个标记,以后和楼主一起研究。
zhangyaoqi_17 2008-10-27
  • 打赏
  • 举报
回复
虽然与问题没什么关系...不过谢谢帮顶

以下是自己研究的结果。读了notepad++的代码和一些codeguru的文章,归纳起来,有以下几种常见的插件设计方法。
1.就是普通的dll,规定一个调用函数,比如dosth(Param *)。插件接口很死,若是扩展起来,函数的罗列看起来也很傻。比如要传递的参数很复杂的话,那么Param结构肯定复杂无比,体积也会随着功能的增加而庞大。优点是实现简单,通俗易懂。适合没什么大变化的小软件。

2.在1的基础上加以改进,定义一个基类plugbase,里面定义几个纯虚函数。只定义一个接口函数,比如createplugObj(),返回一个新建的plugin对象。如果要新建一个插件,只要从基类继承并重载这几个函数即可。EXE调用DLL,然后执行createplugObj(),通过产生的对象,调用其中的只要函数和成员。优点是接口清晰,将参数封装在积累中。创建了插件对象后,不需要每次传递参数都新建一个参数对象

3.学习notepad++的做法,通过发送窗口消息来实现。这是最灵活的做法,但是稍微有点绕。主要原理就是通过DLL获得EXE的句柄,发送自定义windows消息。然后用winmsg携带in和out参数。优点是,采用事件机制,将不同API所需要的参数各自定义,保证了每条消息耗费的资源最少。同时,事件机制可以保证同一时间多个插件获取该事件后,采取不同的操作。
具体的实现,大家可以参照notepad++的源代码。在sourceforge上有。看其中的pluginmgr类。

4.灵活到极点的做法。就是Eclipse的设计。除了基本框架是固定之外,其他任何东西都是插件。框架提供插件和插件之间操作的桥梁。
鉴于该设计复杂难名,与自己设计的初衷不一致,没有细研究。大家有兴趣可以看看孟岩的blog,或许有点帮助。

最终我采用的是第二种方法,主要原因是第三种方法,win32和.net CLR之间消息通讯涉及到托管和非托管的问题,比较绕。而且开发插件的人员编程能力不是很高,可能会无法理解消息机制。参数的操作也会稍有难度。

希望这个结论对别人会有帮助。我的email' natzhang@163.com。欢迎一起交流学习。
beck_zhou 2008-10-10
  • 打赏
  • 举报
回复
http://www.diybl.com/course/3_program/vc/vc_js/2008623/127629.html

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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