中国地质大学(武汉)信息
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
学院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++插件实现实例
普通输出函数方式� ---插件的实现
普通输出函数方式� ---宿主程序的实现
普通输出函数方式� ---宿主程序的实现
基于类多态性方式� ---插件的实现
基于类多态性方式� ---宿主程序的实现
基于类多态性方式� ---宿主程序的实现
推荐电子资源