首页 基于插件的软件框架实现技术

基于插件的软件框架实现技术

举报
开通vip

基于插件的软件框架实现技术 中国地质大学(武汉)信息工程学院2010-10-19 12010-10-19 1 第6章 软件框架构造技术及案例分析 z 6.1 软件框架概述 z 6.2 软件框架研究现状 z 6.3 实例研究——San Francisco商业 开发平台 z 6.4 基于插件的软件框架实现技术 中国地质大学(武汉)信息工程学院2010-10-19 2 基于插件的软件框架实现技术 6.4.1 插件技术背景 6.4.2 插件机制(Mechanism) 6.4.3 插件技术基础---动态链接库(DLL) 6.4.4 基...

基于插件的软件框架实现技术
中国地质大学(武汉)信息 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 学院2010-10-19 12010-10-19 1 第6章 软件框架构造技术及案例 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 z 6.1 软件框架概述 z 6.2 软件框架研究现状 z 6.3 实例研究——San Francisco商业 开发平台 z 6.4 基于插件的软件框架实现技术 中国地质大学(武汉)信息工程学院2010-10-19 2 基于插件的软件框架实现技术 6.4.1 插件技术背景 6.4.2 插件机制(Mechanism) 6.4.3 插件技术基础---动态链接库(DLL) 6.4.4 基于VC++的插件实现技术 中国地质大学(武汉)信息工程学院2010-10-19 3 6.4.1 插件技术背景 中国地质大学(武汉)信息工程学院2010-10-19 4 插件定义 In computing, a plug-in (also called plugin, addin, add-in, addon, add-on, snap-in or snapin, but see also extension) consists of a computer program that interacts with a host application (a web browser or an email client, for example) to provide a certain, usually very specific, function "on demand". 中国地质大学(武汉)信息工程学院2010-10-19 5 使用插件原因 Applications support plug-ins for many reasons. Some of the main reasons include: z to enable third-party developers to create capabilities to extend an application z to support features yet unforeseen z to reduce the size of an application z to separate source code from an application because of incompatible software licenses 中国地质大学(武汉)信息工程学院2010-10-19 6 典型插件系统(1/2) Examples of applications and their plug-ins include: z Microsoft Office uses plug-ins (better known as add-ins) to extend the capabilities of its application by adding custom commands and specialized features z Rockbox, a firmware for digital audio players, can use plug- ins, for example: play games, use the text editor z Email clients use plug-ins to decrypt and encrypt email (Pretty Good Privacy) or to send oversized email attachments z Graphics software use plug-ins to support file formats and process images (Adobe Photoshop) z Media players use plug-ins to support file formats and apply filters (foobar2000, GStreamer, Quintessential, VST, Winamp, XMMS) 中国地质大学(武汉)信息工程学院2010-10-19 7 典型插件系统(2/2) z Packet sniffers use plug-ins to decode packet formats (OmniPeek) z Remote sensing applications use plug-ins to process data from different sensor types (Opticks) z Software development environments use plug-ins to support programming languages (Eclipse, jEdit, MonoDevelop) z Web browsers use plug-ins to play video and presentation formats (Flash, QuickTime, Microsoft Silverlight, 3DMLW) z Some digital mixing consoles allow plug-ins to extend features such as reverberation effects, equalization and compression. z Some Web content management systems use plug-ins to increase functionality. 中国地质大学(武汉)信息工程学院2010-10-19 8 插件和扩展 (Plug-in and extension) Plug-ins differ from extensions, which modify or add to existing functionality. zPlug-ins rely on the host application's user interface and have a well-defined boundary to their possible set of actions. zExtensions have fewer restrictions on their actions, and may provide their own user- interfaces. 中国地质大学(武汉)信息工程学院2010-10-19 9 6.4.2 插件机制(Mechanism) 中国地质大学(武汉)信息工程学院2010-10-19 10 插件技术 所谓插件技术,就是在程序的设计开发 过程中,把整个应用程序分成宿主程序 (host)和插件(plug-in)两个部分。宿主程序 与插件能够互相通信,而且在宿主程序不 变的情况下,可以通过增减或修改插件来 调整应用程序的功能。 中国地质大学(武汉)信息工程学院2010-10-19 11 插件系统体系结构 插件1 插件2 插件n 插件管理 插件调用函数 宿主方接口实 现 . . . 宿主程序 Host Plug-in 中国地质大学(武汉)信息工程学院2010-10-19 12 插件系统构件 中国地质大学(武汉)信息工程学院2010-10-19 13 z The host application provides services which the plug- in can use, including a way for plug-ins to register themselves with the host application and a protocol for the exchange of data with plug-ins. z Plug-ins depend on the services provided by the host application and do not usually work by themselves. Conversely, the host application operates independently of the plug-ins, making it possible for end-users to add and update plug-ins dynamically without needing to make changes to the host application. 中国地质大学(武汉)信息工程学院2010-10-19 14 6.4.3 插件技术基础---动态链接库 (Dynamic Link Library) 中国地质大学(武汉)信息工程学院2010-10-19 15 Interpreter versus compiler (解释器和编译器) 中国地质大学(武汉)信息工程学院2010-10-19 16 Compiler (编译器) 中国地质大学(武汉)信息工程学院2010-10-19 17 Interpreter (解释器) 中国地质大学(武汉)信息工程学院2010-10-19 18 Interpreter versus compiler (解释器和编译器) 中国地质大学(武汉)信息工程学院2010-10-19 19 静态链接 中国地质大学(武汉)信息工程学院2010-10-19 20 动态链接 动态链接指的是在链接时并没有将库函数中的函 数链接到应用程序的可执行文件中,链接是在程序 中运行时动态地执行的。采用动态连接方式的库文 件即为DLL(Dynamic Linkable Library)。尽管链接器 并不把动态链接的函数复制到可执行文件中,但是 它仍要清楚这些函数在什么地方以及怎样调用它 们,为此需要引入库(import library,.Lib文件)来 帮助连接器使用DLL,引入库中包含了DLL中函数的 重定位信息。 中国地质大学(武汉)信息工程学院2010-10-19 21 动态链接 中国地质大学(武汉)信息工程学院2010-10-19 22 DLL到进程地址空间的映射 要调用DLL中的函数,首先必须把DLL的文件映 像映射到调用进程的地址空间中。有两种方法可以实 现这一映射: a.装入时动态链接(load-time dynamic linking) b.运行时动态链接(run-time dynamic linking) 中国地质大学(武汉)信息工程学院2010-10-19 23 装入时动态链接 当应用程序运行时,操作系统在装载应用程序时要查看 EXE文件映像的内容,并将所有被引用的DLL文件映像映射到 进程的地址空间中。 系统在寻找DLL文件时,按以下目录次序进行搜索: 1)包含可执行应用程序的目录。 2)当前目录。 3)Windows的系统目录,使用GetSystemDirectory函数可以返回 该目录的路径。 4)Windows目录,使用GetWindowsDirectory函数可以返回该目 录的路径。 如果按上述次序找不到DLL,应用程序即被终止。 中国地质大学(武汉)信息工程学院2010-10-19 24 运行时动态链接 将链接推迟到运行期间,那么正确的DLL就可 以判定,然后被动态链接,这便是运行时动态链接 的基本思路。 1)HMODULE LoadLirary(LPCTSTR lpszLibFile); 2)BOOL FreeLibrary(HMODULE hLibModule); 3)FARPROC GetProcAddress(HMODULE hModule, LPCTSTR lpszProc); 中国地质大学(武汉)信息工程学院2010-10-19 25 DLL被映射到多个调用进程地址空间的一般情况 中国地质大学(武汉)信息工程学院2010-10-19 26 VC++中动态库创建和使用方法 zVC++动态链接库(DLL)编程深入浅出 z演练:创建和使用动态链接库 z导出函数动态库 模板 个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载 z导出类动态库模板 中国地质大学(武汉)信息工程学院2010-10-19 27 6.4.4 基于VC++插件实现技术 中国地质大学(武汉)信息工程学院2010-10-19 28 在插件系统中,插件实现方法主要有三种: – 普通的输出函数的DLL方式(导出函数); – 使用C++的多态性(导出类); – 使用COM类别(category)机制。 VC++插件实现方法 中国地质大学(武汉)信息工程学院2010-10-19 29 通过一个模拟的音频播放器来介绍插件的这 三种实现技术。一般音频播放器都有这样一些基 本功能:装载音频文件(LoadFile),播放 (Play),暂停(Pause),停止(Stop)。 本例将提供这四个功能。但宿主程序本身并 不会直接实现这些功能,而是调用插件的实现。 每个插件支持一种音频格式,所以每个插件的功 能实现都是不同。 VC++插件实现实例 中国地质大学(武汉)信息工程学院2010-10-19 30 创建一个动态链接库Plug.dll,为了支持四个基本功 能,它输出相应的四个函数:z Void LoadFile(const char *szFileName); z Void Play(); z Void Pause(); z Void Stop(); 为了使宿主程序在运行时能知道这个插件可以支持什 么格式的音频文件,插件程序还应输出一个函数供宿主 程序查询用:z Void GetSupportedFormat(char *szFormat) {if(szFormat!=0) strcpy(szFormat,’’mp3”);} 至此,这个插件就制作完了。可以依样画葫芦再做一 个Plug2.dll,它“支持”.wma文件。 普通输出函数方式 ---插件的实现 中国地质大学(武汉)信息工程学院2010-10-19 31 普通输出函数方式 ---宿主程序的实现 宿主程序是一个基于对话框的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 Windows程序。它 启动时会搜索约定目录(可以约定所有插件都存放在宿主 程序所在目录的Plugins子目录下)并使用Win32函数 Loadliabrary加载所有插件。每加载一个插件DLL,就调用 另一个Win32函数GetSupportedFormat的地址,并调用此函 数返回插件所支持的格式名(即是音频文件的的扩展 名),然后把(格式名,DLL句柄)二元组保存下来。 当用户通过菜单打开文件时,宿主程序会根据扩展名 决定调用哪个插件的LoadFile函数,并指明此插件DLL的 句柄为当前使用的插件的DLL句柄(比如保存到变量 m_hInst中)。此后当用户通过按钮调用Play等其他功能 时,就调用句柄为m_hInst的插件的相应功能。 中国地质大学(武汉)信息工程学院2010-10-19 32 typedef void(*PLAY)(); if(m_hInst) { PLAY Play = (PLAY)::GetProcAddress(m_hInst,”Play”); Play(); } 另外,当程序退出时,应该调用FreeLiabrary函数卸载插件。 普通输出函数方式 ---宿主程序的实现 中国地质大学(武汉)信息工程学院2010-10-19 33 基于类多态性方式 ---插件的实现 Class ICppPlugin { Public: ICppPlugin(){}; Virtual ~ICppPlugin()= 0 {}; Virtual void Release(); Virtual void GetSupportedFormat(char *szFormat) = 0; Virtual void LoadFile(const char *szFileName) = 0 ; Virtual void Play(); Virtual void Stop(); Virtual void Pause(); }; bool CreateObject(void **pObj) {*pObj = new CppPlugin1();return *pObj!=0;} 中国地质大学(武汉)信息工程学院2010-10-19 34 插件的加载过程与第一种方法相似。所不同的是,加载DLL后,首先 调用的是插件程序的CreateObject输出函数来创建对象: typedef bool(*_CreateObject)(void **pObj); //定义一个函数指针类型 _CreateObject createObj=(_CreateObj)::GetProcAddress(hInst,”CreateObject”); //获取CreateObject 的地址,hInst为DLL句柄 ICppPlugin *pObj = 0; //定义一个ICppPlugin的指针 createObj((void**)&pObj); //创建对象 接下来查询插件所支持的格式名。本方式中,GetSupportedFormat已 成为ICppPlugin的成员函数: CString str; pObj->GetSurpportedFormat(str.GetBuffer(8)); str.ReleaseBuffer(); 基于类多态性方式 ---宿主程序的实现 中国地质大学(武汉)信息工程学院2010-10-19 35 另外,需要保存的除(格式名,DLL句柄)二元组映射之外,还需要保存 (格式名,创建对象函数指针)二元组映射以备后用: m_formatMap[str] = hInst; m_factoryMap[str] = createObj; // str存放的是格式名字符串的小写形式 同样,在打开文件时选择使用哪个插件: ICppPlugin *m_pObj;// *m_pObj存放当前使用的对象指针,在程序初始化时 要置为0 if(m_pObj){ m_pObj->Release();m_pObj = 0;} m_factoryMap [strEx]((void**)&m_pObj);//调用CreateObject m_pObj->LoadFile((LPCSTR)strFileName);//strFileName是音频文件全路径名 以后就可以使用m_pObj来调用其它操作了,例如:if(m_pObj) m_pObj- >Play(); 在宿主程序退出时需要卸载DLL。 基于类多态性方式 ---宿主程序的实现 中国地质大学(武汉)信息工程学院2010-10-19 36 推荐电子资源 zhttp://www.codeguru.com/cpp/misc/misc/ zhttp://www.codeproject.com/ zhttp://en.wikipedia.org/wiki/Plugin 第6章 软件框架构造技术及 案例分析 安全事故典型案例分析生活中谈判案例分析管理沟通的案例分析股改案例分析刑法学案例分析 基于插件的软件框架实现技术 6.4.1 插件技术背景 插件定义 使用插件原因 典型插件系统(1/2) 典型插件系统(2/2) 插件和扩展�(Plug-in and extension) 6.4.2 插件机制(Mechanism) 插件技术 插件系统体系结构 插件系统构件 幻灯片编号 13 6.4.3 插件技术基础---动态链接库�(Dynamic Link Library) Interpreter versus compiler�(解释器和编译器) Compiler (编译器) Interpreter (解释器) Interpreter versus compiler�(解释器和编译器) 静态链接 动态链接 动态链接 DLL到进程地址空间的映射 装入时动态链接 运行时动态链接 DLL被映射到多个调用进程地址空间的一般情况 VC++中动态库创建和使用方法 6.4.4 基于VC++插件实现技术 VC++插件实现方法 VC++插件实现实例 普通输出函数方式� ---插件的实现 普通输出函数方式� ---宿主程序的实现 普通输出函数方式� ---宿主程序的实现 基于类多态性方式� ---插件的实现 基于类多态性方式� ---宿主程序的实现 基于类多态性方式� ---宿主程序的实现 推荐电子资源
本文档为【基于插件的软件框架实现技术】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_817407
暂无简介~
格式:pdf
大小:404KB
软件:PDF阅读器
页数:36
分类:互联网
上传时间:2011-11-16
浏览量:8