基于mfc的插件应用程序设计与实现

基于mfc的插件应用程序设计与实现

ID:30640806

大小:17.48 KB

页数:4页

时间:2019-01-02

基于mfc的插件应用程序设计与实现_第1页
基于mfc的插件应用程序设计与实现_第2页
基于mfc的插件应用程序设计与实现_第3页
基于mfc的插件应用程序设计与实现_第4页
资源描述:

《基于mfc的插件应用程序设计与实现》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、从本学科出发,应着重选对国民经济具有一定实用价值和理论意义的课题。课题具有先进性,便于研究生提出新见解,特别是博士生必须有创新性的成果基于MFC的插件应用程序设计与实现摘要讨论了插件应用系统的基础理论及应用优势,据此设计了基本的插件应用系统框架模块并通过MFC基础平台予以具体实现。关键字插件;动态链接库;MFC软件开发手段的演化,就在于以最小的代价得到更健壮且易于扩展和维护的“好”的应用系统,开发工具的持续改进和开发思想的进化使得我们有可能实现上述目标。从面向过程的开发至面向对象的编程,直至目前面向组件的开发,正是上述思维的展现。

2、基于插件的应用系统从体系结构设计出发,着力构建低耦合的,灵活可扩展的且支持无编译热插拔的应用系统,通过分析应用需求,提炼功能相似的模块并设计相应的模块间接口,我们就可以将该部分功能分离出来,综合来看,基于插件的应用系统有以下优势:(1)实现真正意义上的软件组件的“即插即用”。(2)在二进制级上集成软件,减少大量的软件重新编译与发布所带来的麻烦。(3)能够很好地实现软件模块的分工开发,并且能够大量吸取他人的优点。(4)可以较好地实现代码隐藏,保护知识产权。基于插件的体系结构如图1所示。图1插件应用系统体系结构从图1可知,一个完成的基

3、于插件的应用系统共分两部分:插件主控程序以及插件池。主控程序通过核心模块提供插件管理功能,主要包括:课题份量和难易程度要恰当,博士生能在二年内作出结果,硕士生能在一年内作出结果,特别是对实验条件等要有恰当的估计。从本学科出发,应着重选对国民经济具有一定实用价值和理论意义的课题。课题具有先进性,便于研究生提出新见解,特别是博士生必须有创新性的成果注册及卸载插件:插件在使用之前必须注册或存放于特定的路径中,主控程序根据相关配置参数对插件完成初始化工作。启用及禁用插件:主控程序可以根据用户指令,对某些已装载的插件予以启用或禁用。显示插件

4、信息:包括插件描述,开发者信息,版本和版权声明等。配置插件参数:插件本身的运行需要对某些参数进行定制。根据模块规划,插件实现特定的功能并将接口暴露出来,根据需要,可能还需要调用主控程序提供的方法以操作资源或数据。据上述讨论,我们设计一个基本的插件应用系统框架,其中主控程序是基于MFC对话框的应用程序,插件使用动态库实现,插件管理部分使用专门的CPluginManager类实现,其实现的函数如图2所示。图插件管理类视图就主要函数说明如表1所示。表1插件管理类提供的函数函数名称函数说明Init初始化,搜索所有有效插件Shutdown释

5、放资源GetAll得到所有插件名,用CString对象返回,名之间用:隔开Count返回可用插件的个数Run调用插件提供的函数接口Load载入所有插件UnLoad卸载所有插件ExtractFilePath提取插件存放路径以Load函数为例,我们使用STL的MAP数据结构存放插件句柄和插件的对应,代码如下:voidCPluginManager::Load(){//……相关变量定义省略GetModuleFileName(AfxGetApp()->m_hInstance,filepath,MAX_PATH-1);SetCurrentDi

6、rectory(ExtractFilePath(filepath));课题份量和难易程度要恰当,博士生能在二年内作出结果,硕士生能在一年内作出结果,特别是对实验条件等要有恰当的估计。从本学科出发,应着重选对国民经济具有一定实用价值和理论意义的课题。课题具有先进性,便于研究生提出新见解,特别是博士生必须有创新性的成果CFileFindfinder;CStringstrWildCard=_T("*.plx");BOOLbWorking=(strWildCard);while(bWorking){bWorking=();if(()

7、

8、(

9、))continue;HMODULEhm=LoadLibrary(());if(!hm){//……载入失败处理代码}elseif(NULL==GetProcAddress(hm,"PluginMain")){//……非可用插件处理代码}else_(make_pair((),hm));}}插件提供的接口函数如下(仅作为示例,如需其它接口,可照此添加):#ifdefPLUG1_EXPORTS#definePLUG_API__declspec(dllexport)#else#definePLUG_API__declspec(dllimp

10、ort)#endifPLUG_APIvoidPluginMain(void){::MessageBox(NULL,"插件1测试成功!","Plugin1",MB_OK);}主控程序使用树控件展示插件功能,程序初始化时首先调用初始化函数完成控件注册,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。