plug-in 通用开发框架及其在 gis 中的应用_第1页
plug-in 通用开发框架及其在 gis 中的应用_第2页
plug-in 通用开发框架及其在 gis 中的应用_第3页
plug-in 通用开发框架及其在 gis 中的应用_第4页
plug-in 通用开发框架及其在 gis 中的应用_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中国科学技术大学学士论文第一章绪论本科毕业论文题目PLUGIN通用开发框架及其在GIS中的应用系别自动化系专业自动控制姓名程俊学号9401009导师鲍远律、张旺生一九九九年六月第1页中国科学技术大学学士论文第一章绪论第2页致谢首先要感谢鲍远律教授和张旺生老师,在我本科学习期间,他们给了我悉心的指导,用他们渊博的知识指导我、严谨的治学态度影响我,使我受益非浅。在我的论文完成过程中,他们又给我提出了很多宝贵的意见。其次,我要感谢96级研究生段凌宇同学,他是我们这个研究课题组的组长。我在实验室学习期间,他一直给了我很多的指导,使我了解了很多新知识,开阔了视野。我的毕业论文就是他的研究课题中的一部分,在软件开发工作中给了我极大的指导,使我能够顺利地完成论文。我还要感谢我的同学李春生和实验室的其他同学,他们都给我的论文提出了不少好的建议,并为我提供了许多便利条件。最后,我要感谢含辛茹苦把我养大的父母,是他们教会了我怎样做人,给我创造了良好的学习条件。如果没有他们的支持和鼓励,就不会有这篇论文的完成。摘要当前,全球的信息正在实现共享,人们可以通过浏览器从WWW上获得自己想要的信息,随着WEB技术的迅速发展,计算模式正在从客户机/服务器模式向浏览器/服务器模式转变,但是浏览器只能浏览有限的文件类型,对于大多数的文件类型以及用户自定义的文件类型并不能浏览,这样就远远无法满足用户的需要。NETSCAPE开发的PLUGINS(插件程序)对上述问题提供了一种解决办法,每一种PLUGIN都能处理一种或几种文件类型。PLUGIN作为网络能力的一种扩展,将大部分负荷加在浏览器程序上,这样既可以正确地浏览很多地数据类型,又可以减轻服务器的大部分负担。地理信息系统(GIS)是随着信息技术的发展而不断发展的,这明显地表现在计算模式的转变上。当前,GIS正由客户机/服务器模式向浏览器/服务器模式转变,也就是把有关地理信息的数据文件放在服务器上,用户通过浏览器进行访问。这种计算模式便于GIS数据文件的修改和发布,使得大量的远程用户都能访问,将GIS功能嵌入应用程序中,大大提高了开发的效率及GIS应用的广度。但是,对于GIS特定的数据文件,浏览器是无法正确地浏览的,这就需要有辅助应用中国科学技术大学学士论文第一章绪论第3页程序来帮助浏览器正确地浏览地理信息,而开发一个GISPLUGIN是一种较好的解决方法。另外,PLUGIN还能够解决远程实时系统的数据传输问题以及管理信息系统(MIS)的数据采集等多方面的问题。因此,它将有更广阔的应用前景。本文首先介绍了PLUGINS概念、应用背景、工作原理,接着介绍我们用DELPHI开发的开发框架,并且通过它在GIS领域的应用来给出具体范例。关键词PLUGIN,GIS,IVMS,NPP_函数,NPN_函数ABSTRACTTODAY,INFORMATIONISSHAREDINTHEWORLDWIDEPEOPLECANGETTHEINFORMATIONWHICHTHEYWANTTHROUGHBROWSERFROMTHEWORLDWIDEWEBBUTBROWSERCANONLYBROWSEFEWKINDSOFFILESASFORMANYKINDSOFFILESANDFILESDEFINEDBYTHEUSER,BROWSERCANNOTDEALSOITCANNOTSATISFYTHEUSERONEWAYTOSOLVETHISPROBLEMISTHEPLUGINSDEVELOPEDBYTHENETSCAPECOMPANYONEPLUGINCANDEALWITHONEORSEVERALKINDSOFFILESASEXTENSIONOFTHEWEB,PLUGINADDMANYBURDENTOBROWSER,SOTHATITCANLIGHTENTHEBURDENOFTHESERVER。GEOGRAPHICINFORMATIONSYSTEMHASDEVELOPEDVERYFASTWITHTHEDEVELOPMENTOFITTHISAPPEARSINTHECHANGEOFTHECOMPUTINGMODENOWTHEGISCOMPUTINGMODEISCOMINGTOBEBROWSER/SERVERMODEFROMCLIENT/SERVERMODETHISISTOSAY,ADMINISTRATORSSAVETHEDATAFILESINASERVER,USERSACCESSTHESEFILESTHROUGHBROWSERTHISMODEISCONVENIENTFORADMINISTRATORSTOMODIFYTHESEDATAFILESANDCONVENIENTFORLARGENUMBEROFUSERSTOACCESSTHEMMOREOVER,THISMODECANIMPROVETHEEFFICIENCYOFEXPLOITATIONBUTBROWSERCANNOTBROWSEGISSDATAFILESSOTHEREMUSTBEAASSISTANT中国科学技术大学学士论文第一章绪论第4页APPLICATIONTOHELPBROWSERDEVELOPINGAGISPLUGINISONEOFTHEBETTERWAYSTOSOLVEITINADDITION,PLUGINSCANBEUSEDINMANYFIELDS,IEMISSO,ITHASAMOREWIDELYAPPLIEDFUTUREINTHISTHESIS,IWILLINTRODUCETHECONCEPTION,BACKGROUNDANDPRINCIPLEFIRSTTHENIWILLINTRODUCETHEEXPLOITATIONFRAMEOFOURPLUGINPROGRAMMEDBYDELPHIATLAST,IWILLINTRODUCEOURGISPLUGINWHICHISANEXAMPLEOFPLUGINSUSEINTHEGISFIELDKEYWORDSPLUGIN,GIS,IVMS,NPN_FUNCTIONS,NPP_FUNCTIONS目录第一章绪论111论文的研究背景112论文的安排2第二章PLUGIN简介421产生背景422MIME类型介绍423PLUGIN的3种形式524PLUGIN的应用6第三章PLUGIN的通用开发框架731DLLS工作原理的简介7中国科学技术大学学士论文第一章绪论第5页32NETSCAPEPLUGINAPI简介933PLUGIN工作原理1234PLUGIN的开发框架2035PLUGIN和JAVA、JAVASCRIPT26第四章PLUGIN在GIS中的应用2741环境的建立2742开发GISPLUGIN28第五章总结3451PLUGIN与ACTIVEX的比较3452PLUGIN之未来35第一章绪论本章首先简单介绍了GPS在车辆监控系统中的应用,然后提出了用户的要求,从而指出本论文的意义所在。11论文的研究背景111GPS简介及在车辆定位系统中的应用GPS是英文NAVIGATIONSATELLITETIMINGANDRANGING/GLOBAL中国科学技术大学学士论文第一章绪论第6页POSITIONSYSTEM的字头缩写词NAVSTAR/GPS的简称。它的含义是,利用导航卫星进行测时和测距,以构成全球定位系统。现在国际上已经公认将这一全球定位系统简称为GPS。从GPS的提出到1993年建成,经历了20年,实践证实,GPS对人类活动影响极大,应用价值极高,所以得到美国政府和军队的重视,不惜投资300亿美元来建立这一工程,成为继阿波罗登月计划和航天飞机计划之后的第三项庞大空间计划。它从根本上解决了人类在地球上的导航和定位问题,可以满足各种不同用户的需要。对舰船而言,它能在海上协同作战,在海洋交通管制、海洋测量、石油探测、海轮进出港等方面作出贡献。在陆地上,可用于各种车辆、坦克和陆军等的定位;甚至进入人们的日常生活,例如,汽车、旅游、探险等方面的定位。总之,GPS定位系统的建立,给导航和定位技术带来了巨大的变化。在当前信息社会中,交通运输的合理调度和管制是一个重要问题,也是促进社会生产和人类生活的关键环节。例如,出租汽车公司的汽车检测和调度,公共汽车的合理调度,公安警车的调度和指挥、运钞车监控、各专业运输公司车辆的监控等等,都需要实时向总部报告自己所在的位置,或者总部实时地询问各车辆的位置,以便即时指挥调度和处理发生的事件。为此过去各个部门根据自己的需要建立了自己的专用系统。自GPS出现以来,这一应用得到了长足的发展。目前车辆定位系统在国内外得到了广泛的应用。对于车辆监控系统来说,首先需要城市的交通地图信息,这样才能根据从车辆上的GPS接收机传回的经纬度信息来确定车辆在城市中的具体位置,而这些必须要建立各个城市的地理信息系统(GIS),生成矢量地图文件。因此,GIS在车辆监控系统中处于十分重要的基础地位。112GIS简介及用户对IVMS的要求自从60十年代世界上第一个GIS诞生以来,GIS如“星星之火”迅速发展;到如今,地理信息系统正形成完整的技术系统并逐渐地建立其独立的理论体系。它的应用渗透于社会的各个领域,已从传统的自然资源管理、土地规划等领域扩展到交通、军事、商业等非常广泛的领域,并取得了巨大的经济效益。地理信息是一种重要的分布式信息资源。“它既具有社会效益,也具有市场价值,是解决人口、资源、环境和灾害等重大社会可持续发展面临的问题,以及促进社会经济持续、快速和健康发展的基础信息手段。”所以,在地理信息领域,如中国科学技术大学学士论文第一章绪论第7页何发布信息,使得GIS真正地为非专业人员服务,也即建立信息的共享技术和开放技术就显得尤为重要。车辆监控系统是GIS在交通方面的应用,交通运输的合理调度和管制是一个重要问题,也是促进社会生产和人类生活的关键环节。例如,出租汽车公司的汽车检测和调度,公共汽车的合理调度,公安警车的调度和指挥、运钞车监控、各专业运输公司车辆的监控等等,都需要实时向总部报告自己所在的位置,或者总部实时地询问各车辆的位置,以便即时指挥调度和处理发生的事件。为此过去各个部门根据自己的需要建立了自己的专用系统。自GPS出现以来,这一应用得到了长足的发展。目前车辆定位系统在国内外得到了广泛的应用。但是,监控系统是监控移动目标的,移动目标就意味着流动性。任何车辆不可能只在固定一个监控区域活动。当车辆离开一个区域,进入新的区域,车辆是否可以自动加入本地网,接受服务。并且,还要通过网络把车辆的信息传送给外地车辆所属单位,以便让这些单位知道车辆的位置、状态等。作者所在的实验室成功地开发了智能车辆监控系统(IVMS),并已投入实际应用,在实际应用中,用户就提出了能否实现联网监控。针对这一问题,我们做了研究,并且提出了一种解决方案。本文解决了该方案中的一个问题,即如何利用浏览器通过互联网来查看车辆信息。12论文的安排第一章绪论简要介绍GPS在车辆监控系统中的应用,通过实际需要,说明了为什么要做这篇论文,其意义所在。第二章PLUGIN产生背景介绍了PLUGIN的产生背景、概念、3种形式及其现在的实际应用情况,还简要介绍了MIME的概念以及在PLUGIN中的应用。第三章PLUGIN通用开发框架介绍了PLUGIN的工作原理,一些常用函数的功能,我们用DELPHI开发的PLUGIN开发框架。第四章PLUGIN在GIS中的应用本章作为PLUGIN开发的一个实例来具体说明PLUGIN的开发过程,并且解决了绪论中提出的问题。第五章总结本章把PLUGIN技术和当前较为流行的ACTIVEX控件做了比较,指出了它们各自的优、缺点和应用范围,最后展望了PLUGIN的未来。中国科学技术大学学士论文第一章绪论第8页第二章PLUGIN简介本章主要介绍了PLUGIN的产生背景,紧接着介绍PLUGIN的一些基本概念以及现在的一些实际应用21产生背景全球信息正以惊人的速度在世界范围内扩展。它已深入到人类活动的方方面面,从早期在学术和科学研究中所扮演的角色扩展到商业、政府、国际关系和娱乐业等各个领域。今天,WWW网已初具世中国科学技术大学学士论文第二章PLUGIN简介第9页界规模,人们可以在网上发现任何东西科学论文、图书分类介绍、电视实况转播、网络多媒体播放等等。开发用于发送这些内容的最初的HTML(超文本标记语言)和HTTP(超文本传输协议)规范远远满足不了用户和WEB站点开发者们更多内容、更高速度和更大容量的需求。NETSCAPE开发的PLUGIN对上述问题提供了一种解决办法,PLUGIN作为网络能力的一种扩展,将大部分负荷加在浏览器程序上,而不是服务器和INTERNET连接程序上,以便适当地转换像音频和视频实况转播、集成电子表格或客户应用等新的内容。PLUGIN是一种接入浏览器程序的动态链接库(DLL),所有PLUGIN的DLL文件名都以NP(NETSCAPEPLUGIN)开头,增加了以前所没有的能力。其最大的优点是当需要是暂时接入,用完后又脱开以释放系统资源。尽管NETSCAPENAVIGATOR和INTERNETEXPLORER等浏览器的功能日益强大,但是,仍然还有许多浏览器不能显示的文件,如视频文件、音频文件、奇特的图形文件和文本文件、压缩文件,以及许多用户自定义文件等。为了在浏览器上显示并处理这些特殊类型的文件,必须安装合适的辅助应用程序或者PLUGIN。PLUGIN扩展和补充了浏览器的本地能力,扩展和增强了能够在WWW和INTRANET上发送内容的类型。由于有了PLUGIN,WEB浏览器在没有外部辅助应用程序的情况下可以联机显示动画、多媒体、音频、交互应用和视频。现在,许多公司已经推出了能够显示它们自己专有的多媒体、应用、动画和其他特有的数据格式文件的PLUGIN。22MIME类型介绍NETSCAPE是按MIME类型来识别WEB上文件的。MIME是通用邮件扩展的简称,但是,MIME类型定义并不是专为INTERNET邮件而设的,它们可以用来识别在INTERNET网上传送的任何文件。通常WEB页不是由单个文件组成的,而是多个文件的集合。例如,文本部分通常是一个HTML文本文件,每个图形是一个独立的GIF或JPEG格式文件。当浏览器阅读WEB页时,服务程序送出所有这些数据流,并用上述的MIME类型定义页眉来识别每一部分。MIME类型定义由两部分组成类型/子类型。例如,IMAGE/JPEG这一MIME类型定义描述了JPEG格式的图象文件,WEB服务程序在将该文件送到NETSCAPE以前,就为该文件隐蔽地送出了MIME类型定义。NETSCAPE读取该定义并检查看它是否能够处理这个内部文件,或者是否需要为该文件定中国科学技术大学学士论文第二章PLUGIN简介第10页义一个辅助应用程序或者PLUGIN。用户可以看到一个完整的MIME类型列表,该列表是NETSCAPE通过从NETSCAPE菜单选择OPTIONS、GENERAL参数选项,然后选择HELPERS标签由本地识别的。然后会看到如图11所示的参数对话框的HELPER页。但是,NETSCAPE并不局限于这几种文件类型,用户可以为任何文件类型增加PLUGIN。已经批准认可的MIME类型只有7种,即文本、音频、图象、视频、多片段、消息和应用。任何新的程序或数据文件类型都必须归入这7种MIME类型之一。然而,MIME子类型有“正式”和“非正式”两种,文件类型表中的正式子类型是以没有X为前缀的形式出现的,这一前缀是表示非正式MIME子类型的正规方式。然而,作为“非正式”的MIME子类型并非“二等公民”,这仅仅意味着管理MIME标准的组织INTERNET工作组还没有为那种类型定义一个正式的子类型。但是,所有这些MIME要素对用户来说都是完全透明的,通常不必为之操心,因为PLUGIN的MIME类型注册都是在安装期间自动进行的23PLUGIN的3种形式当在计算机上安装了PLUGIN以后,WEB页便初始化该PLUGIN,并以3种可能的形式出现嵌入式、全屏幕和隐式。嵌入式PLUGIN以一种可视的矩形窗并入WEB页。这一视窗看上去与嵌入的GIF或JPEG图象创建的视窗相同。由NETSCAPE支持的前一种视窗和由PLUGIN创建的视窗之间的主要差别在于,PLUGIN视窗可以支持范围更广泛的交互性和运动,因而可以保持动态而非静止。嵌入式PLUGIN可以读取并记录鼠标的点击、位置和移动,键盘输入以及任何其他输入装置的输入,这样,PLUGIN可以支持需要产生复杂应用程序的各种各样的用户事件。嵌入式PLUGIN的实例有动态图象专家组(MPEG)和QUICKTIME电影播放程序,SHOCKWAVEFORMACROMEDIADIRECTOR播放程序或者类似于VDOLIVE这样的WINDOWS视频播放程序。全屏幕PLUGIN接管NETSCAPE整个当前视窗以显示其自身的内容。当WEB页是设计用来显示HTML不支持的数据时,这种PLUGIN是很有必要的,ADOBEACROBAT浏览器便是其中一例。隐式PLUGIN没有任何可视元素,但严格地工作于幕后以给NETSCAPE增添某些在其他方面所没有的特征。隐式PLUGIN的例子包括MIDI音乐播放程序或文件解压工具。MIDI播放PLUGIN能够从它中国科学技术大学学士论文第二章PLUGIN简介第11页所遇到的WEB页上读取MIDI数据,并通过本地硬件自动地播放数据。不管使用哪种PLUGIN,NETSCAPE用户界面的其余部分均保持相对稳定,并且可以使用。24PLUGIN的应用NETSCAPEPLUGINAPI的当前版本支持如下4种范围广泛的功能1、可以作为NETSCAPE分层窗口一部分的本地窗口元素上画图,或从中接收事件。2、通过URL从网络上获取MIME数据。3、生成NETSCAPE或其他PLUGIN所用的数据。4、超驰和实现协议柄。从理论上讲,NETSCAPEPLUGIN适合于利用象JAVA、虚拟现实模型语言(VRML)和MPEG这样的独立于平台的协议、结构、语言和媒体类型。即使PLUGIN在功能上做到跨平台等效和透明,也应该提供象OLE2这样的专有平台协议和结构。PLUGIN大致分为3种主要类型多媒体、VRML和商业应用。多媒体PLUGIN是PLUGIN开发的核心和灵魂,这一类包括音频、视频、动画和多媒体图象的联机播放程序。多媒体PLUGIN的主要实际应用有REALAUDIO、LIVEAUDIO等。VRMLPLUGIN显示用虚拟现实语言创建的三维联机“世界”。商业应用PLUGIN也是开发的热门领域,现在,对于ADOBEACROBAT可移植文本格式、EXCEL兼容的联机电子表格和WORD文档等均有PLUGIN提供,有些PLUGIN甚至将自己开发的应用程序与NETSCAPE一起使用,早期的例子包括索引程序、股票报价器和图象世界钟等。第三章PLUGIN的通用开发框架本章先简单说明一下DLLS的工作原理;接着第二节简单介绍了开发PLUGIN所用到的主要函数及其功能;第三节说明PLUGIN与特定的MIME类型文件是如何联系起来的、NETSCAPE载入PLUGIN的过程、PLUGIN的工作流程;第四节介绍我们用DELPHI开发的通用开发框架;第五节简单介绍了PLUGIN和JAVA及JAVASCRIPE的联系。31DLLS工作原理的简介中国科学技术大学学士论文第三章PLUGIN的通用开发框架第12页由于PLUGIN是动态链接库(DLL)函数,所以在本章的开头,我将简单介绍一下DLLS的一些基本概念及其工作原理,这将有助于对PLUGIN的进一步了解。311DLLS的产生原因及概念动态链接库DLLS是从C语言函数库和PASCAL库单元的概念发展而来的。所有的C语言标准库函数都存放在某一函数库中,同时用户也可以用LIB程序创建自己的函数库。在链接应用程序的过程中,链接器从库文件中拷贝程序调用的函数代码,并把这些函数代码添加到可执行文件中。这种方法同只把函数储存在已编译的OBJ文件中相比更有利于代码的重用。但随着WINDOWS这样的多任务环境的出现,函数库的方法显得过于累赘。如果为了完成屏幕输出、消息处理、内存管理、对话框等操作,每个程序都不得不拥有自己的函数,那么WINDOWS程序将变得非常庞大。WINDOWS的发展要求允许同时运行的几个程序共享一组函数的单一拷贝。动态链接库就是在这种情况下出现的。动态链接库不用重复编译或链接,一旦装入内存,DLLS函数可以被系统中的任何正在运行的应用程序软件所使用,而不必再将DLLS函数的另一拷贝装入内存。根据DLLS完成的功能,我们把DLLS分为如下的三类1完成一般功能的DLLS;2用于数据交换的DLLS;3用于窗体重用的DLLS。312动态链接库的工作原理“动态链接”这几字指明了DLLS是如何工作的。对于常规的函数库,链接器从中拷贝它需要的所有库函数,并把确切的函数地址传送给调用这些函数的程序。而对于DLLS,函数储存在一个独立的动态链接库文件中。在创建WINDOWS程序时,链接过程并不把DLLS文件链接到程序上。直到程序运行并调用一个DLLS中的函数时,该程序才要求这个函数的地址。此时WINDOWS才在DLLS中寻找被调用函数,并把它的地址传送给调用程序。采用这种方法,DLLS达到了复用代码的极限。动态链接库的另一个方便之处是对动态链接库中函数的修改可中国科学技术大学学士论文第三章PLUGIN的通用开发框架第13页以自动传播到所有调用它的程序中,而不必对程序作任何改动或处理。DLLS不仅提供了函数重用的机制,而且提供了数据共享的机制。任何应用程序都可以共享由装入内存的DLLS管理的内存资源块。只包含共享数据的DLLS称为资源文件。如WINDOWS的字体文件等。313DELPHI环境下DLLS的编写在DELPHI环境中,编写一个DLLS同编写一个一般的应用程序并没有太大的区别。事实上作为DLLS主体的DLL函数的编写,除了在内存、资源的管理上有所不同外,并不需要其它特别的手段。而DLLS工程文件的格式为LIBRARY工程标题USES子句EXPROTS子句程序体DLLS工程文件头标用LIBRARY关键字,通知编译器生成DLL文件;假如DLLS要输出供其它应用程序使用的函数或过程,则必须将这些函数或过程列在EXPORTS子句中。314调用DLLS的两种方式有两种方法可用于调用一个储存在DLLS中的过程。1静态调用或显示装载使用一个外部声明子句,使DLLS在应用程序开始执行前即被装入。使用这种方法,程序无法在运行时间里决定DLLS的调用。假如一个特定的DLLS在运行时无法使用,则应用程序将无法执行。在静态调用一个DLLS中的过程或函数时,EXTERNAL指示增加到过程或函数的声明语句中。被调用的过程或函数必须采用远调用模式。这可以使用FAR过程指示或一个F编译指示。DELPHI全部支持传统WINDOWS动态链接库编程中的三种调用方式,它们是通过过程/函数名通过过程/函数的别名通过过程/函数的顺序号通过过程或函数的别名调用,给用户编程提供了灵活性,而通过中国科学技术大学学士论文第三章PLUGIN的通用开发框架第14页顺序号INDEX调用可以提高相应DLL的装载速度。2动态调用或隐式装载使用WINDOWSAPI函数LOADLIBRAY和GETPROCADDRESS可以实现在运行时间里动态装载DLLS并调用其中的过程。若程序只在其中的一部分调用DLLS的过程,或者程序使用哪个DLLS,调用其中的哪个过程需要根据程序运行的实际状态来判断,那么使用动态调用就是一个很好的选择。使用动态调用,即使装载一个DLLS失败了,程序仍能继续运行。32NETSCAPEPLUGINAPI简介在我们开始讨论PLUGIN的开发之前,有必要先熟悉NETSCAPE提供的一些主要函数的功能,PLUGINAPI由三部分组成PLUGIN方法。由开发PLUGIN的人员实现,被NETSCAPE调用,这些函数的名字前缀为NPP_。NETSCAPE方法。由NETSCAPE实现,被PLUGIN调用,PLUGIN可通过此类方法申请内存空间、访问远程URL,此类函数的名字前缀为NPN_。一组特定的PLUGIN数据结构。用于PLUGIN和NETSCAPE的数据交换、数据存储等。以下简单介绍一些关键的API函数1、PLUGIN的初始化,实例的创建和删除当PLUGIN被调入内存时,NETSCAPE调用NPP_INITIALIZE初始化PLUGIN,在此函数中可以做与特定PLUGIN有关的、影响所有PLUGIN实例的初始化。通过NPP_NEWNETSCAPE创建一个PLUGIN实例,这个函数可被调用多次用以创建不同的PLUGIN实例。当不需要PLUGIN时,NETSCAPE先调用NPP_DESTROY删除实例,然后调用NPP_SHUTDOWN将PLUGIN从内存中去除。2、PLUGIN处理输入和输出当NETSCAPE为PLUGIN创建实例的同时也为基于窗口的PLUGIN注册了一个窗口类并在WEB页面中为PLUGIN实例创建窗口。通过中国科学技术大学学士论文第三章PLUGIN的通用开发框架第15页NPP_SETWINDOWNETSCAPE将此窗口句柄和窗口大小等属性作为参数传递给PLUGIN。PLUGIN通过子类化此窗口将自己的窗口函数作为此窗口的窗口函数。通过对窗口函数的编写,PLUGIN可以接收和处理用户发送的任何消息,同时可以通过此窗口将输出显示给用户。这个窗口是PLUGIN的工作的核心。3、NETSCAPE和PLUGIN的数据交换NETSCAPE和PLUGIN之间通过流来交换彼此的数据。不同与一般的高级编程语言的流,PLUGIN的流是代表了一个URL及其数据的对象。NETSCAPE和PLUGIN都可以创建流,读取流中的数据。流就象一个管道,NETSCAPE和PLUGIN分别位于两端,在任意一端只能执行读或写。NETSCAPE创建的流有三种模式。流的模式由PLUGIN在NETSCAPE创建流时和NETSCAPE协商得到。NETSCAPE通过NPP_NEWSTREAM创建流时,将传递一个流的模式参数,PLUGIN在它返回时设置这个参数,缺省设置是NP_NORMAL;通过NPP_DESTROYSTREAM删除流。PLUGIN也可以调用NPN_DESTROYSTREAM删除流。下面就分别介绍这三种流正常模式。当参数设置为NP_NORMAL时采用该模式,当有数据可发送时NETSCAPE就把数据发送给PLUGIN,这些数据可能是以非正常顺序到达的。NETSCAPE通过调用一系列的NPP_WRITEREADY和NPP_WRITE来发送数据的。NETSCAPE通过LEN这个参数告诉PLUGIN它将发送多少数据,NETSCAPE调用NPP_WRITEREADY来确定PLUGIN每次准备接收多少字节的数据,再调用NPP_WRITE发送数据。此种模式的效率较高。随机存取模式。若调用NPP_NEWSTREAM时将其中的布尔型参数SEEKABLE设为真时,就采用此种模式。此时,流中的数据先由PLUGIN调用NPN_REQUESTREAD加以指明所要获取的数据的范围,然后NETSCAPE调用NPP_WRITEREADY和NPP_WRITE把数据传送给PLUGIN。这种模式需要远程服务器的支持或NETSCAPE先将流数据存到本地的临时文件中。用这种模式时,用户可以从服务器的数据文件中任意读取自己想要的记录,就如同从本地硬盘上读取一个记录一样。文件模式。把参数设置为NP_ASFILE即可。NETSCAPE先将整个URL数据存到一个本地文件中,然后通过NPP_STREAMASFILE将文件名传给PLUGIN。PLUGIN可以通过文件操作获得所要数据。中国科学技术大学学士论文第三章PLUGIN的通用开发框架第16页PLUGIN创建的流只有一种模式,对应于NETSCAPE所创建的正常模式流但是方向相反。PLUGIN调用NPN_NEWSTREAM创建流,通过NPN_WRITE把流中的数据发送给NETSCAPE,调用NPN_DESTROYSTREAM删除流。在创建流时可以指明流数据的目的地,可能是WEB页面中的一个FRAME或是一个新的浏览器的窗口。通过目的地的指明,PLUGIN可以达到和NETSCAPE的无缝连接。在实际应用中,应用软件可能需要几个数据文件,因此就需要等待网络把所有的数据传送到之后才能进行下一步操作。但是,PLUGIN调用NPN_GETURL会有一定的延时,若一个文件接着一个文件这样下载,那么用户等待的时间势必会较长。幸好现在流行的几种操作平台都支持多线程操作,我们就可以采用多线程的方式同时下载几个数据文件。4、访问URLPLUGIN可以通过NETSCAPE访问远程的URL。URL类型可以是NETSCAPE支持的任何一种URL类型,包括HTTP、FTP、NEWS、GOPHER等。PLUGIN以异步方式处理URL。PLUGIN通过NPN_GETURL、NPN_POSTURL、NPN_GETURLNOTIFY、NPN_POSTURLNOTIFY指定所要访问的URL和传送给URL的数据(如果URL可接收数据)和URL响应的目的地。这个目的地可以是WEB页面中的一个FRAME或一个新的浏览器窗口,也可以是PLUGIN本身。当目的地是PLUGIN时,NETSCAPE创建一个流传送URL的响应。PLUGIN调用上述函数时立即返回,对于带有NOTIFY的函数,NETSCAPE调用NPP_URLNOTIFY通知PLUGINURL的响应已到。通过访问URL的函数,PLUGIN可以访问任何远程的URL。当URL为HTTP类型时,NETSCAPE将NPN_GETURL和NPN_GETURLNOTIFY解释为HTTP的GET方法,将NPN_POSTURL和NPN_POSTURLNOTIFY解释成HTTP的POST方法。通过后者PLUGIN可以把数据传递给CGI程序,也可以把文件上载到远程的FTP服务器。访问URL是PLUGINAPI最有使用价值的函数。这可以使PLUGIN根据情况自动访问远程的服务器,这在构造一个分布式应用时是非常有价值的。33PLUGIN工作原理中国科学技术大学学士论文第三章PLUGIN的通用开发框架第17页331PLUGIN与MIME类型文件的联系PLUGIN是独立的代码模块,但它可作为浏览器的一部分,可以扩展浏览器的功能,实现和用户的交互功能和多媒体功能。可用来处理浏览器自身不能处理的数据类型。在WINDOWS运行环境下,PLUGIN以DLL形式出现,通常存放在以下两个目录中NETSCAPENAVIGATORPROGRAMPLUGINS或PLUGMICROSOFTINTERNETPLUGINS。在平时只占用磁盘空间而不占有内存,最大的优点是可以减小对内存的消耗。浏览器每次启动都将检查这两个目录下的所有PLUGINDLL文件,这些DLL文件在其资源的版本信息中有关键词为FILEEXTENTS、FILEDESCIPTION、FILEOPENNAME、MIMETYPE的字符串,根据这些值NETSCAPE建立一张所有目前可以用的PLUGIN及其所支持的MIME类型文件的表格,如果有两个或者两个以上的PLUGIN都能处理同样的MIME类型,NAVIGATOR将注册它最后发现的那个。NETSCAPENAVIGATOR的使用者选择HELPABOUTPLUGINS菜单,可以看到如表321所示的PLUGIN注册列表。NAVIGATOR通过下面三种方法来确定文件的MIME类型NAVIGATOR连接到发送文件MIME类型域名的服务器NAVIGATOR从标签中读出该文件的MIME类型NAVIGATOR通过判断文件的扩展名与PLUGIN发布的MIME类型是否匹配文件类型与PLUGIN的联系常用的方法是通过HTML语言的标签建立的,NETSCAPE通过调用NPP_NEW函数,用其中的参数ARGC、ARGN和ARGV来从标签中传送参数,如表示当前主页嵌入了AVI数据源VACATIONAVI,如果此时BROWSER已注册LIVEAUDIOPLUGIN,BROWSER便下载VACATION文件,并传递给LIVEAUDIOPLUGIN,由它处理AVI数据的播放。PLUGIN运行界面是作为HTML输出页面上的一个子窗口出现的,其显示区域的大小和相对位置由WIDTH和HEIGHT决定。的详细语法规则见表32。NPP_NEW中的三个参数ARGC、ARGV和ARGN的值为ARGC3ARGN“SRC”,”WIDTH”,”HEIGHT”中国科学技术大学学士论文第三章PLUGIN的通用开发框架ARGVVACATIONAVI,320,200LIVEAUDIOFILENAMEENETSCAPPROGRAMPLUGINSNPAUDIODLLLIVEAUDIONETSCAPENAVIGATORSOUNDPLAYINGCOMPONENTMIMETYPEDESCRIPTIONSUFFIXSENABLEDAUDIO/BASICAUAUYESAUDIO/XAIFFAIFFAIF,AIFFYESAUDIO/AIFFAIFFAIF,AIFFYESAUDIO/XWAVWAVWAVYESAUDIO/WAVWAVWAVYESAUDIO/XMIDIMIDIMID,MIDIYES表31部分PLUGIN注册列表ATTRIBUTEATTRIBUTEDESCRIPTIONHEIGHTN确定PLUGIN显示区域高度NAMETEXT提供PLUGIN的引用名PALETTERGB|RGB设置前景和背景颜色的调色板SRCURL确定数据文件的URL路径UNITSPIXELS|EN设置区域宽度和高度的尺寸量度WIDTHN确定PLUGIN显示区域宽度EMBEDATTRIBUTES表32EMBED标签属性列表332NETSCAPE载入PLUGIN的过程如果MIME类型是浏览器本身能处理的类型(例如TEXT/HTML或者IMAGE/GIF),那么浏览器将调用它本身的程序来处理;如果MIME类型不是浏览器所固有的,并且也找不到相应的PLUGIN或辅助应用程序来处理,那么它将显示一个对话框来说明错误信息(INTERNETEXPLORER会提示你在本机保存该文件)。如果NAVIGATOR发现一个匹配第18页中国科学技术大学学士论文第三章PLUGIN的通用开发框架第19页的PLUGIN,它将检查PLUGIN是否已被启动,如果PLUGIN未被启动,NAVIGATOR将执行一系列调用PLUGIN的程序首先调用WINDOWS函数LOADLIBRARY将PLUGIN从本机硬盘装入内存,接着使用GETPROCADDRESS函数来找到PLUGIN的DLLENTRYPOINT,DLLENTRYPOINT执行与DLLMAIN相同的任务当首次调用PLUGIN时传送DLL_PROCESS_ATTACH原因代码,以及后来实例传送时的DLL_THREAD_ATTACH原因代码,在这两种情况下的返回值都为TRUE。接下来就将传递三个参数给PLUGIN首先传递指向NETSCAPE函数表的指针;然后传递指向PLUGIN函数表的指针;最后传递UNIVERSALPROCPOINTERUPP来确定退出方式。接着调用PLUGIN的输出函数,在我们用DELPHI所编写的通用开发框架中,三个输出函数为EXPORTSNP_GETENTRYPOINTSINDEX1NP_INITIALIZEINDEX2NP_SHUTDOWNINDEX3DLL载入后,调用NP_GETENTRYPOINTS来检查传递进来的参数是否有效,然后检查PLUGIN函数表是否包含所要的PLUGIN函数,如果有一个无效,那么PLUGIN将退出,并返回错误原因代码NPERR_INVALID_FUNCTABLE_ERROR;若没有错误,NAVIGATOR就把NPP_函数复制到PLUGIN函数表,供NETSCAPE调用。当NAVIGATOR把NPP_函数的地址复制之后,它将调用NP_INITIALIZE,首先检查它的参数是否有效,如果出错,将返回NPERR_INVALID_FUNCTABLE_ERROR并退出;接着检查PLUGIN和NAVIGATOR的主版本号是否匹配,PLUGIN的主版本号至少应该与NAVIGATOR的相同,如果不匹配,将返回错误原因NPERR_INCOMPATIBLE_VERSION_ERROR并退出。如果检查都通过了,就把NPN_函数复制给NETSCAPE函数表,供PLUGIN调用。通过调用上述的两个函数,就已经建立了NETSCAPE函数表和PLUGIN函数表,它们之间可以相互调用来实现PLUGIN的功能。接着,PLUGIN将会执行初始化函数NPP_INITIALIZE,在这里对你所编写的PLUGIN的数据成员进行初始化,分配所创建的PLUGIN的所有实例需要的硬盘文件、内存和其它资源。如果执行成功,将返回NPERR_NOERROR,否则,返回相应的错误代码。通过以上步骤,PLUGIN已经被载入内存中,NETSCAPE和PLUGIN中国科学技术大学学士论文第三章PLUGIN的通用开发框架知道怎样对话,所有的初始化过程已经完成,此时PLUGIN已经准备号进行处理了。下面给出NETSCAPE载入PLUGIN的流程的示意图如图33所示NAVIGATOR发现MIME类型文件NAVIGATOR自身能否处理处理有否相应的PLUGIN显示出错信息LOADLIBRARY将PLUGIN载入内存NP_GETENTRYPOINTS,初始化PLUGIN函数表NP_INITIALIZE初始化NETSCAPE函数表NPP_INITIALIZE进行必要的初始化下一步处理是否是否的过程载入图INPLUGNETSCAPE33333PLUGIN处理的过程从上面的讨论中我们可以看到,PLUGIN已经被NAVIGATOR载入,第20页中国科学技术大学学士论文第三章PLUGIN的通用开发框架第21页准备开始工作了。为了让PLUGIN开始工作,必须创建一个实例,这可以通过调用NPP_NEW来完成,在我们用DELPHI编写的程序中,NPP_NEW函数的描述如下FUNCTIONNPP_NEWPLUGINTYPETNPMIMETYPEINSTANCEPNPPMODEWORDARGCWORDCONSTARGNTPCHARARRAYCONSTARGVTPCHARARRAYCONSTSAVEDTNPSAVEDDATATNPERRORCDECL其中参数MODE用来告诉PLUGIN是用EMBED方式还是用FULL方式来打开WEB主页的,它的有效值为NP_EMBED和NP_FULL;参数SAVED的作用是当实例被取消时,可以保存数据,NAVIGATOR将把数据与当前的URL路径联系起来,等下次相同的URL再次被请求时,NAVIGATOR将在NPP_NEW中恢复所保存的数据。PLUGIN会检查实例是否为空,如果为空,NAVIGATOR将给你的PLUGIN传送一个空指针,并返回NPERR_INVALID_INSTANCE_ERROR。实例创建之后,NAVIGATOR就准备向PLUGIN发送数据,为了建立MIME类型文件和PLUGIN的连接并决定PLUGIN以什么模式接收数据,NETSCAPE将会调用NPP_NEWSTREAM完成,该函数描述如下FUNCTIONNPP_NEWSTREAMINSTANCEPNPPMIMETYPETNPMIMETYPESTREAMPNPSTREAMSEEKABLETNPBOOLVARSTYPEWORDTNPERROR如果把参数设置为TRUE,那么PLUGIN将采用随机存取模式接收数据。如果设置为FALSE,那么当参数STYPE为NP_NORMAL时,采取正常模式接收数据;STYPE为NP_ASFILE时,采用文件模式接收数据。现在,PLUGIN已经作好接收数据的准备了。如果把接收模式设中国科学技术大学学士论文第三章PLUGIN的通用开发框架第22页置为文件模式,NETSCAPE就会调用NPP_STREAMASFILE,该函数描述如下PROCEDURENPP_STREAMASFILEINSTANCEPNPPSTREAMPNPSTREAMFNAMEPCHAR通过参数FNAME把下载到本机的数据文件的文件名传给PLUGIN,以便PLUGIN对数据的进一步操作。如果接收模式为正常模式或者随机存取模式,那么NETSCAPE就会调用一系列的NPP_WRITEREADY和NPP_WRITE对数据流进行操作。函数描述如下FUNCTIONNPP_WRITEREADYINSTANCEPNPPSTREAMPNPSTREAMLONGINTFUNCTIONNPP_WRITEINSTANCEPNPPSTREAMPNPSTREAMOFFSETLONGINTLENLONGINTVARBUFFERLONGINTNPP_WRITEREADY的作用是它的函数返回值决定NAVIGATOR每次传送多少字节的数据给PLUGIN;NPP_WRITE是对传送过来的数据做想要的处理,该函数会返回PLUGIN所接收到的数据的实际字节数,如果返回值超过在函数NPP_WRITE中设置的字节数,这就证明此次传送出错,NPP_WRITE将返回负值,NAVIGATOR把这个值看作销毁流的请求,并调用PLUGIN的函数NPP_DESTROYSTREAM。等到数据流全部传送完之后,就调用NPP_DESTROYSTREAM撤消所建立的数据流的连接,该函数形式如下FUNCTIONNPP_DESTROYSTREAMINSTANCEPNPPSTREAMPNPSTREAMREASONTNPREASONTNPERROR其中的参数REASON表示撤消的原因。当用户关闭WEB主页时,NAVIGATOR就会调用PLUGIN的中国科学技术大学学士论文第三章PLUGIN的通用开发框架第23页NPP_DESTROY函数,来释放内存并且保存实例数据到参数SAVE中,把用户访问信息和URL路径联系起来。然后,调用NP_SHUTDOWN把PLUGIN卸载。下面给出PLUGIN处理过程的流程示意图中国科学技术大学学士论文第三章PLUGIN的通用开发框架NPP_NEW创建实例NPP_NEWSTREAM建立新的数据流STYPE是否为NPASFILENPP_STREAMASFILE,把文件保存到本机反复调用NPP_WRITEREADY和NPP_WRITENPP_DESTROYSTREAMNPP_DESTROYNP_SHUTDOWN是否处理数据流的流程图图INPLUG43第24页中国科学技术大学学士论文第三章PLUGIN的通用开发框架第25页34PLUGIN的开发框架现在,NETSCAPE公司已经提供了免费的PLUGINSDK,这是用C编写的,而我们实验室所开发的IVMS是用DELPHI编写的,为了能利用开发好的系统,我们在NETSCAPE提供的SDK基础上,进行代码的PASCAL改写。为了保证开发出的PLUGIN框架具有良好的开放性和代码可维护性,我们对PLUGIN框架进行了类封装。341PLUGIN中的数据类型在我们编写的程序中,首先要对N

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论