- 1、本文档共40页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十六章 软件体系结构风格;上节回顾;课程内容
插件技术背景
插件机制(Mechanism)
插件技术基础——动态链接库(DLL)
基于插件技术的系统案例;课程内容
插件技术背景
插件机制(Mechanism)
插件技术基础——动态链接库(DLL)
基于插件技术的系统案例;插件Plug-in定义
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 brower or an email client,for example)to provide a centain,usuall very specific,function“on demand”
;典型的插件系统
Microsoft Office
Graphic software
Web browsers
Software development environment
……;典型的插件系统;使用插件的意义
支持特性扩展
支持第三方开发
降低应用程序大小;课程内容
插件技术背景
插件机制(Mechanism)
插件技术基础——动态链接库(DLL)
基于插件技术的系统案例;什么是插件技术
在程序设计过程中,把应用程序分成两部分
宿主程序(host)
插件(plug-in)
契约(contract);插件系统架构
;插件系统实现步骤
设计契约(取决于业务背景)
设计插件
设计宿主程序;课程内容
插件技术背景
插件机制(Mechanism)
插件技术基础——动态链接库(DLL)
基于插件技术的系统案例;编译器和解释器
解释器在软件中的应用由来已久,早期的程序语言环境就分为编译(Complication)和解释(Interpretation)两大类
二者在目标、功能与实现上有何差别?
二者的性能有何差别?;编译器(Compiler)
解释器(Interpreter)
;静态链接;动态链接
动态链接指的是在链接时并没有将库函数中的函数连接到应用程序的可执行文件。链接是在程序中运行时动态来执行的。
采用动态链接方式的库文件即为DLL(Dynamic Linkable Library)。
;动态链接;DLL到进程地址空间的映射
要调用DLL中的函数,首先必须把DLL的文件映像映射到调用进程的地址空间中。有两种方法可以实现这一映射:
装入时动态链接(load-time dynamic linking)
运行时动态链接(run-time dynamic linking);装入时动态链接
当应用程序运行时,操作系统在装载应用程序是要查看exe文件映像的内容,并将所有被引用的DLL文件映像映射到进程的地址空间中。
系统在寻找DLL文件时,按以下目录次序搜索
包含可执行应用程序的目录
当前目录
Windows系统目录,使用GetSystemDirectory函数可以返回该目录路径
Windows目录,使用GetWindowsDirectory函数可以返回该目录路径。;运行时动态链接
将链接推迟到运行期间,那么正确的DLL就可以判定,然后被动态链接,这便是运行时动态链接的基本思路;课程内容
插件技术背景
插件机制(Mechanism)
插件技术基础——动态链接库(DLL)
基于插件技术的系统案例;案例:基于C#实现插件管理器;;案例:基于C#实现插件管理器
Net技术实现插件机制的步骤
动态加载
Assembly类的几个静态的Load(Load,LoadFile,LoadFrom)方法来动态加载
获得所有类型
判定是否为插件接口类型
创建插件实例
;案例:基于C#实现插件管理器
;设计契约:应用程序契约;设计契约:插件契约;插件代码;插件代码;宿主程序代码;扩展案例:音频播放器
通过模拟的音频播放器来介绍插件的实现技术
一般音频播放器都有这样一些基本功能:
装载音频文件(LoadFile)
播放(Play)
暂停(Pause)
停止(Stop)
本例将提供这四个功能。但宿主程序本身不会直接实现这些功能,而是调用插件的实现。每个插件支持一种音频格式,所以每个插件的功能实现都是不同的。
;扩展案例:音频播放器——插件的实现
创建一个动态链接库Plug.dll,为了支持四个基本功能,它输出相应的四个函数:
Void LoadFile(const char *szFileName);
Void Play();
Void Pause();
Void Stop();;扩展案例:音频播放器——插件的实现
文档评论(0)