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

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

中国地质大学(武汉)信息工程学院2010-10-1912010-10-191第6章软件框架构造技术及案例分析z6.1软件框架概述z6.2软件框架研究现状z6.3实例研究——SanFrancisco商业开发平台z6.4基于插件的软件框架实现技术中国地质大学(武汉)信息工程学院2010-10-192基于插件的软件框架实现技术6.4.1插件技术背景6.4.2插件机制(Mechanism)6.4.3插件技术基础---动态链接库(DLL)6.4.4基于VC++的插件实现技术中国地质大学(武汉)信息工程学院2010-10-1936.4.1插件技术背景中国地质大学(武汉)信息工程学院2010-10-194插件定义Incomputing,aplug-in(alsocalledplugin,addin,add-in,addon,add-on,snap-inorsnapin,butseealsoextension)consistsofacomputerprogramthatinteractswithahostapplication(awebbrowseroranemailclient,forexample)toprovideacertain,usuallyveryspecific,functionondemand.中国地质大学(武汉)信息工程学院2010-10-195使用插件原因Applicationssupportplug-insformanyreasons.Someofthemainreasonsinclude:ztoenablethird-partydeveloperstocreatecapabilitiestoextendanapplicationztosupportfeaturesyetunforeseenztoreducethesizeofanapplicationztoseparatesourcecodefromanapplicationbecauseofincompatiblesoftwarelicenses中国地质大学(武汉)信息工程学院2010-10-196典型插件系统(1/2)Examplesofapplicationsandtheirplug-insinclude:zMicrosoftOfficeusesplug-ins(betterknownasadd-ins)toextendthecapabilitiesofitsapplicationbyaddingcustomcommandsandspecializedfeatureszRockbox,afirmwarefordigitalaudioplayers,canuseplug-ins,forexample:playgames,usethetexteditorzEmailclientsuseplug-instodecryptandencryptemail(PrettyGoodPrivacy)ortosendoversizedemailattachmentszGraphicssoftwareuseplug-instosupportfileformatsandprocessimages(AdobePhotoshop)zMediaplayersuseplug-instosupportfileformatsandapplyfilters(foobar2000,GStreamer,Quintessential,VST,Winamp,XMMS)中国地质大学(武汉)信息工程学院2010-10-197典型插件系统(2/2)zPacketsniffersuseplug-instodecodepacketformats(OmniPeek)zRemotesensingapplicationsuseplug-instoprocessdatafromdifferentsensortypes(Opticks)zSoftwaredevelopmentenvironmentsuseplug-instosupportprogramminglanguages(Eclipse,jEdit,MonoDevelop)zWebbrowsersuseplug-instoplayvideoandpresentationformats(Flash,QuickTime,MicrosoftSilverlight,3DMLW)zSomedigitalmixingconsolesallowplug-instoextendfeaturessuchasreverberationeffects,equalizationandcompression.zSomeWebcontentmanagementsystemsuseplug-instoincreasefunctionality.中国地质大学(武汉)信息工程学院2010-10-198插件和扩展(Plug-inandextension)Plug-insdifferfromextensions,whichmodifyoraddtoexistingfunctionality.zPlug-insrelyonthehostapplication'suserinterfaceandhaveawell-definedboundarytotheirpossiblesetofactions.zExtensionshavefewerrestrictionsontheiractions,andmayprovidetheirownuser-interfaces.中国地质大学(武汉)信息工程学院2010-10-1996.4.2插件机制(Mechanism)中国地质大学(武汉)信息工程学院2010-10-1910插件技术所谓插件技术,就是在程序的设计开发过程中,把整个应用程序分成宿主程序(host)和插件(plug-in)两个部分。宿主程序与插件能够互相通信,而且在宿主程序不变的情况下,可以通过增减或修改插件来调整应用程序的功能。中国地质大学(武汉)信息工程学院2010-10-1911插件系统体系结构插件1插件2插件n插件管理插件调用函数宿主方接口实现...宿主程序HostPlug-in中国地质大学(武汉)信息工程学院2010-10-1912插件系统构件中国地质大学(武汉)信息工程学院2010-10-1913zThehostapplicationprovidesserviceswhichtheplug-incanuse,includingawayforplug-instoregisterthemselveswiththehostapplicationandaprotocolfortheexchangeofdatawithplug-ins.zPlug-insdependontheservicesprovidedbythehostapplicationanddonotusuallyworkbythemselves.Conversely,thehostapplicationoperatesindependentlyoftheplug-ins,makingitpossibleforend-userstoaddandupdateplug-insdynamicallywithoutneedingtomakechangestothehostapplication.中国地质大学(武汉)信息工程学院2010-10-19146.4.3插件技术基础---动态链接库(DynamicLinkLibrary)中国地质大学(武汉)信息工程学院2010-10-1915Interpreterversuscompiler(解释器和编译器)中国地质大学(武汉)信息工程学院2010-10-1916Compiler(编译器)中国地质大学(武汉)信息工程学院2010-10-1917Interpreter(解释器)中国地质大学(武汉)信息工程学院2010-10-1918Interpreterversuscompiler(解释器和编译器)中国地质大学(武汉)信息工程学院2010-10-1919静态链接中国地质大学(武汉)信息工程学院2010-10-1920动态链接动态链接指的是在链接时并没有将库函数中的函数链接到应用程序的可执行文件中,链接是在程序中运行时动态地执行的。采用动态连接方式的库文件即为DLL(DynamicLinkableLibrary)。尽管链接器并不把动态链接的函数复制到可执行文件中,但是它仍要清楚这些函数在什么地方以及怎样调用它们,为此需要引入库(importlibrary,.Lib文件)来帮助连接器使用DLL,引入库中包含了DLL中函数的重定位信息。中国地质大学(武汉)信息工程学院2010-10-1921动态链接中国地质大学(武汉)信息工程学院2010-10-1922DLL到进程地址空间的映射要调用DLL中的函数,首先必须把DLL的文件映像映射到调用进程的地址空间中。有两种方法可以实现这一映射:a.装入时动态链接(load-timedynamiclinking)b.运行时动态链接(run-timedynamiclinking)中国地质大学(武汉)信息工程学院2010-10-1923装入时动态链接当应用程序运行时,操作系统在装载应用程序时要查看EXE文件映像的内容,并将所有被引用的DLL文件映像映射到进程的地址空间中。系统在寻找DLL文件时,按以下目录次序进行搜索:1)包含可执行应用程序的目录。2)当前目录。3)Windows的系统目录,使用GetSystemDirectory函数可以返回该目录的路径。4)Windows目录,使用GetWindowsDirectory函数可以返回该目录的路径。如果按上述次序找不到DLL,应用程序即被终止。中国地质大学(武汉)信息工程学院2010-10-1924运行时动态链接将链接推迟到运行期间,那么正确的DLL就可以判定,然后被动态链接,这便是运行时动态链接的基本思路。1)HMODULELoadLirary(LPCTSTRlpszLibFile);2)BOOLFreeLibrary(HMODULEhLibModule);3)FARPROCGetProcAddress(HMODULEhModule,LPCTSTRlpszProc);中国地质大学(武汉)信息工程学院2010-10-1925DLL被映射到多个调用进程地址空间的一般情况中国地质大学(武汉)信息工程学院2010-10-1926VC++中动态库创建和使用方法zVC++动态链接库(DLL)编程深入浅出z演练:创建和使用动态链接库z导出函数动态库模板z导出类动态库模板中国地质大学(武汉)信息工程学院2010-10-19276.4.4基于VC++插件实现技术中国地质大学(武汉)信息工程学院2010-10-1928在插件系统中,插件实现方法主要有三种:–普通的输出函数的DLL方式(导出函数);–使用C++的多态性(导出类);–使用COM类别(category)机制。VC++插件实现方法中国地质大学(武汉)信息工程学院2010-10-1929通过一个模拟的音频播放器来介绍插件的这三种实现技术。一般音频播放器都有这样一些基本功能:装载音频文件(LoadFile),播放(Play),暂停(Pause),停止(Stop)。本例将提供这四个功能。但宿主程序本身并不会直接实现这些功能,而是调用插件的实现。每个插件支持一种音频格式,所以每个插件的功能实现都是不同。VC++插件实现实例中国地质大学(武汉)信息工程学院2010-10-1930创建一个动态链接库Plug.dll,为了支持四个基本功能,它输出相应的四个函数:zVoidLoadFile(constchar*szFileName);zVoidPlay();zVoidPause();zVoidStop();为了使宿主程序在运行时能知道这个插件可以支持什么格式的音频文件,插件程序还应输出一个函数供宿主程序查询

1 / 36
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功