- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Windows平台下C 插件系统实现的几个关键技术问题及其解决思路
Windows平台下C 插件系统实现的几个关键技术问题及其解决思路
Windows平台下C++插件系统实现的几个关键技术问题及其解决思路
windows平台c++设计模式框架工具
来源:/clever101/
根据我的实践,在Windows平台下设计并实现一个C++插件系统,需要解决几个关键技术问题。下面我谈谈需要解决的几个关键技术问题以及我想到的简单的解决思路。由于我主要专注于Windows平台C++程序的开发,这里假设以VS为编译环境,MFC界面库来说明。
1. 主程序和插件的关系问题
插件架构一般可以用下面的图来表示:
(注:此图来自李先静的博客文章:/absurd/archive/2021/07/04/877063.aspx,略有修改,特向李大侠表示感谢)
一般来说:应用程序框架所完成的功能应为一个软件系统的核心和基础,这些基本功能主要包括一些核心功能,即可为用户使用,也可为插件使用。插件所完成的功能是对应用程序框架功能的扩展与补充,一般插件完成系列化功能,例如:PHOTOSHOP的滤镜插件完成对图形的特殊效果处理,这些功能都有一些共性,可以进行集中管理,并且是可以定义出标准的插件接口。
还有一般更为极端一点:应用程序框架不实现任何具体的功能,只充当一个插件容器。然后由插件实现具体的功能。
2.界面配置问题
界面配置对大家可能不太陌生。在较早的时候我们曾使用ini文件进行界面配置,随着扩展性更强的XML的兴起,使用XML文件进行界面配置逐渐流行起来。
界面配置的实现流程如下:
3.界面和逻辑的结合及消息处理问题
单纯的实现对界面的配置并不能算是一个插件系统,插件系统更重要的是如何实现对消息的处理。首先我们要明确在一个系统我们主要要处理哪些消息。我总结了一下,请大家看下表:
其中一个桌面应用系统主要处理的是菜单消息、工具栏按钮消息、鼠标消息、键盘消息、键盘消息和系统的其它消息和其它控件消息,如ComboBox控件消息和停靠栏消息。在上面六项中前四项又是主要的。下面我简单谈谈菜单消息、工具栏消息、鼠标消息和键盘消息的实现思路。
菜单消息和工具栏消息的处理本质是一样的,就是以ID为标识来寻找命令消息处理函数以及界面更新处理函数。那么用ID和消息处理函数绑定在一起呢?一种办法是使用boost::bind就行绑定,具体参看我以前写的一篇博客:巧用boost库实现字符串映射消息处理函数。
鼠标和键盘消息的响应有三种思路:一种是使用C++的类的虚函数机制,具体是在底层定义一个消息处理对象的基类,在主程序里有一个消息处理对象的基类指针,在插件模块里实现消息处理对象基类的派生类,并定义一个派生类的变量,在适当的时候将将这个派生类变量的指针赋值给主程序的基类指针,然后这个基类指针负责处理所有的鼠标和键盘消息;
第二种思路是使用C++的回调设计模式(关于C++的回调设计模式,这里有一篇很棒的文章:回调设计模式),具体是凡是要响应鼠标和键? 盘消息的插件模块在初始化时都要注册回调函数(所谓注册回调函数主要就是把响应鼠标键盘消息的函数指针保存下来),然后在主程序的鼠标键盘的响应函数里把该指针取出来调用;第三种思路是使用windows的Hook机制,大致的思路是在插件模块里使用钩子来截获所有窗口的鼠标键盘消息,这个思路我还没有更多的思考,但我想应该是可以的。
拉拉杂杂谈了一些插件系统实现的思路,希望能对大家能有所帮助。
上一篇:warning LNK4070的解决办法
下一篇:以教促学,共享信息
12楼 buaasuozi 2021-10-22 17:35发表 [回复]
11楼 wang679513 2021-10-13 00:12发表 [回复]
10楼 tphlj 2021-10-02 23:24发表 [回复]
我没写过插件系统,不过分析过一点
你可以去看看codeblocks的实现原理
Re: 好好学习_天天向上 2021-10-07 09:42发表 [回复]
codeblocks确实是一个很好的插件系统,应该是使用wxWidgets界面库的。
9楼 liushengbing 2021-09-30 19:38发表 [回复]
楼上不要这样极端嘛,可能实际都操作的差不多,只是因为描述不够大众化,插件与主程序只是用一套协议规定,就跟TCP一样的,
Re: 好好学习_天天向上 2021-10-02 15:37发表 [回复]
您可能关注的文档
最近下载
- 波司登MSP检核专项考核及服务销售相关知识试卷.docx
- 第十七届全国大学生先进成图技术与产品信息建模创新大赛——全国总决赛赛题(建筑类).pdf VIP
- 《外科护理学肺部疾病》授课表.doc VIP
- 《GB13495.1-2015消防安全标志第1部分:标志》最新解读.pptx VIP
- 2025年(完整word版)体育单招英语试题与附标准答案 .pdf VIP
- 部编版三年级上册第一单元作业设计.pptx VIP
- 建筑地基基础工程施工规范完整版2024.pdf VIP
- 榆林能源集团有限公司招聘工作人员考试真题2024.docx VIP
- 整车座椅的设计开发方法与流程.pptx VIP
- GB50864-2013 尾矿设施施工及验收规范.docx VIP
文档评论(0)