插件开发

2024-10-09

插件开发(共8篇)

插件开发 篇1

Excel未提供奇偶页打印功能,用户按奇偶页方式打印时,一般采用手工输入奇、偶页码逐页完成打印过程,操作繁琐且效率低。常见的解决方案是利用Excel的宏(macro)来实现,具体实现不再赘述,宏在使用和共享分发方面存在较大局限。利用VB和Office COM插件技术开发Excel打印插件,能够有效克服上述问题。主要区别如图1所示。

1 Office COM插件技术简介

Office COM插件,也称为Office COM“外接程序”或“附加程序”,用于生成应用程序外接程序以增强和控制Office应用程序,如Adobe公司的Adobe PDF插件就是典型实例。Office COM插件开发支持常见的编程语言,微软的Visual Studio编程开发环境集成了Office COM插件开发向导,开发效率相对高效。完成的插件以DLL(动态链接库)文件形式存在,通过Windows平台的Regsvr32.exe程序注册或反注册DLL文件来加载和撤销加载插件功能。

2 实例编程

文章以VB6实例开发Excel2000打印奇偶页插件。

2.1 插件功能

1)具有良好的操作界面;

2)支持按奇数、偶数、全部、指定页码范围打印;3)支持逆页序打印;

4)易于共享分发;

5)支持加载/撤销加载插件。

2.2 编程

1)启用VB6,新建工程-“外接程序”(图2所示),工程命名为“ExcelOEPrint”,工程自动添加一个默认设计器Connect,手工添加一个窗体Form1,一个模块Module1,窗体布局和设计器Connect属性描述分别如图3、图4所示。

2)模块Module1定义Excel对象全局变量。

Public objExcel As Object'变量定义:Excel全局对象

3)设计器Connect中需预自定义事件变量,响应插件在Excel中的相关操作事件,OnConnection事件主要负责插件与Excel的连接和在Excel工具栏中添加命令按钮。主要代码如下:

2.3 生成DLL文件

选择“文件”-“生成ExcelOEPrint.dll”,生成后的DLL文件将自动注册到本地系统中。需要注意的是:在生成DLL文件时,需关闭已运行的Excel程序,否则将出错。

3 使用、加载/撤销加载和共享分发

1)使用:启动Excel,在“常用”工具栏中将出现“奇偶页打印”按钮项,点击弹出显示打印窗体,如图5、图6所示。

2)加载/撤销加载:运行Regsvr32.exe注册或反注册DLL文件以完成插件的加载和撤销加载操作。需要注意的是:在运行Regsvr32.exe注册或反注册时,需要关闭已运行的Excel程序,否则操作将失效。

3)共享分发:将DLL文件复制到客户机,运行Regsvr32.exe注册DLL文件。

4 结束语

Office COM插件开发作为新的开发领域,其实用性越来越受到开发人员的重视,由于其独特的编程机制,开发者在掌握相关编程语言、COM插件和VBA技术知识的前提下,可以开发出更多丰富功能的Office插件。文章实例对于初次开发Office插件的开发人员提供了较为详细的范例。

摘要:基于VB和Office COM插件(Office COM Add-In)技术实例开发Excel打印插件,解决了Excel无法打印奇偶页的问题,同时在使用和共享分发方面优于Excel宏的类似实现方案。

关键词:Excel打印,奇偶页,Excel插件,Office COM,VB

参考文献

[1]Microsoft Corporation.How to build an Office2000COM add-in in Visual Basic[EB/OL].(2007-01-24).http://support.microsoft.com/kb/238228/en-us.

[2]Microsoft Corporation.HOWTO:Use a COM Add-In Function as an Excel Worksheet Function.[EB/OL].(2005-08-23).http://support.microsoft.com/kb/256624/en-us.

[3]Microsoft Corporation.Excel COM add-ins and Automation add-ins.[EB/OL].(2007-01-10).http://support.microsoft.com/kb/291392/en-us.

[4]郭四稳,李传中.Office自动化编程的设计及应用[J].电脑知识与技术,2006(17).

[5]王鸿儒.Excel VBA程序设计[M].北京:中国铁道出版社,2005.

[6]McFedries P.Office2000VBA编程技术[M].韩松,译.北京:电子工业出版社,2002.

插件开发 篇2

而目前,随着IE 浏览器份额的不断下跌,非IE浏览器用户逐渐成长,已经成为一支不可忽视的力量。根据互联网分析公司StatCounter的统计,截止到7月初,在全球市场中,IE继续丧失市场份额,份额已跌至43.58%。而Firefox占据28.34%,Chrome占据20.65%,Safari占据5.07%,Opera占据1.74%。IE目前只占据不到一半的市场份额,失去了霸主地位。

因此,仅仅支持IE浏览器的网站和网络应用,早已不能满足广大用户的需求,使用NPAPI标准开发跨浏览器平台的插件已经势在必行,

NPAPI是Netscape Plugin Application Programming Interface的缩写,不难看出这项标准始创于Netscape(也就是Mozilla的前身),Mozilla Firefox的插件就是采用的NPAPI标准。但是目前这项标准早已不仅限于Mozilla Firefox,而成为了一个通用的标准。也就是说只要符合NPAPI接口开发的插件,不但可以在Mozilla Firefox上使用,也可以在Google Chrome、Apple Safari、Opera等浏览器上使用,我们常用的Flash播放器 、支付宝安全控件都是用NPAPI技术开发的。这些控件让我们可以使用不同的浏览器来播放flash动画和在线支付。

最后,给大家分享一个实例,帮助大家了解如何使用NPAPI技术来解决网站和网络应用上不兼容非IE内核浏览器的问题。

点击:NPAPI开发详解,Windows版

或搜索 “NPAPI开发”即可找到此文章。

希望借此能够引起广大软件厂商和开发者的注意,重视非IE浏览器用户,并改进在非IE内核浏览器上的用户体验。

点击阅读更多学院相关文章>>

插件开发 篇3

万象网管2008软件目前在网吧有很大的市场, 提供了插件实现扩充功能, 但插件开发文档不公开。文中在这方面做了一些探索, 为其增加了一个菜单及多个菜单项。希望能起到抛砖引玉的作用, 为实现更多的实用功能打下坚实的基础。

2 原理

万象网管2008软件启动过程中, 通过加载插件 (形式为动态链接库) 实现扩充功能。在插件中通过输出函数:GetRe-alName、GetRealNameNo、wxhEndTask、wxhSetMenu、wxhSetSomeMsg、wxhRegistNewCallBack、wxhEnterKeys、wxhExchange、wxhSetComputerStat、wxhDelComputer、wxhNewComputer、wxhGetFee、wxhGetSomeLgl、wxhMenuClicked、wxhAddMenu、wxhRegistCallBack、wxhCheckOut、wxhCheckIn、wxhCheckCard等实现各项功能。其中GetRealName、GetRealNameNo、wxhAddMenu、wxhMenuClicked和wxhSetSomeMsg 5个输出函数是下文所要讨论的。大多数输出函数的含义从名称上就能看出来。

万象网管2008通过插件的输出函数与插件交换信息。万象网管2008的插件分为服务端和收银端两部分。

3 插件安装及使用方法

(1) 在注册表[HKEY_CURRENT_USERSoftwareSicentwx2008Plugins]项 (服务端项) 下增加REG_SZ项, 名称任意, 值为插件的动态链接库名称。在注册表[HKEY_CUR-RENT_USERSoftwareSicentwx2008ConPlugins]项 (收银端项) 下增加REG_SZ项, 名称任意, 值为插件的动态链接库名称。附件中有“注册.reg”文件, 双击该文件, 可实现该步的功能;另有“反注册.reg”文件, 双击该文件可恢复到原先的状态。

(2) 将插件的动态链接库文件复制到万象网管2008目录下, 如万象网管2008安装在“C:wx2008”目录下, 动态链接库文件分别为“wxhelperCsl.dll”和“WxhelperSvr.dll”, 则将“wxhelperCsl.dll”和“wxhelperSvr”复制到“C:wx2008”目录下。

(3) 运行万象网管2008软件, 在其菜单中可看到“插件示例 (&P) ”菜单, 点击该菜单, 弹出下拉菜单。再点击各菜单项, 即可看到结果。

4 程序解释

(1) 原先在插件中使用Delphi窗体, 结果出现错误, 只好使用Windows的标准资源文件。资源文件“test.res”包含了一个对话框。要说明的是对话框的资源ID号是888, “确定”按钮的资源ID号是889, 这在程序中都要用到。

(2) 对话框处理回调函数用于处理对话框消息。

插件的对话框只放置了一些说明性的标签和一个“确定”按纽。按下“确定”按纽即可关闭对话框。注意一定不要省略后面的“;stdcall”, 下同。

(3) “GetRealName”输出函数用于获得插件名称。

(4) “GetRealNameNo”输出函数用于获得插件版本号。

(5) “wxhAddMenu”输出函数用于增加菜单及菜单项。

参数只有一个, 返回给万象网管2008新加的菜单及菜单项。格式为:各项之间用回车换行隔开, 第一项是菜单名, 示例中是“插件示例 (&P) ”, 其余部分是菜单下的各个菜单项。示例中有3个菜单项“测试 (&S) …”、“访问本网站主页 (&W) …”、“关于 (&A) …”。

(6) “wxhMenuClicked”输出函数用于实现菜单项的各项功能。

参数index是万象网管2008传过来的选择新加菜单及菜单项的序号。0表示选择菜单, 1表示选择第一个菜单项, 以此类推。示例中只定义了一个菜单和5个菜单项。“wxhMenuClicked”输出函数开始处用“if (index>5) then exit;”排除了多于5的情况。

菜单对应index (0) , 不用处理, 直接退出。

菜单项2对应index (2) 和菜单项4对应index (4) 是横线, 不用处理, 直接退出。

菜单项1“测试 (&S) …”对应index (1) , 调用Windows API函数“DialogBoxParam”弹出一个对话框。具体处理消息由第1步实现。

菜单项3“访问本网站主页 (&W) …”对应index (3) , 调用Windows API函数“ShellExecute”实现跳转到本网站页面。

菜单项5“关于 (&A) …”对应index (5) , 调用Windows API函数“MessageBox”弹出一个对话框, 说明本插件关于的情况。

(7) “wxhSetSomeMsg”输出函数设置杂项功能。

参数vP1返回'ok'表示一切正常。

(8) 本插件收银端输出了GetRealName、GetRealNameNo、wxhMenuAddMenu、wxhMenuClicked和wxhSetSomeMsg 5个函数。服务端只输出前两个函数。

5 运行界面

(1) 图1为添加菜单及菜单项后的界面。

(2) 图2为点击“测试 (S) …”后的运行结果图。

6 调试及测试环境

(1) 编程环境:Delphi 7.0企业版。

(2) 调试运行环境:Windows 2003。

(3) 万象网管软件版本:2008标准版。

7 结语

本插件实现了在万象网管2008软件上增加一个菜单及多个菜单项的功能, 在万象网管2008标准版下运行正常。理论上在万象网管2008增强版上也能正常运行。

该插件经过修改也能在万象网管2004软件下运行, 不过万象网管2004软件不分服务器端和收银端。读者可以根据自己的实际需要增加或修改输出函数实现自己的功能。

摘要:用Delphi开发万象网管2008插件, 使其软件的功能得以扩充。

插件开发 篇4

现代软件的复杂度早已超出人们的想象, 特别是企业级软件, 由于客户对于软件的稳定性和效率, 以及强大的功能, 都直接导致了企业及软件的开发测试和以及部署工作的复杂性。近年来软件行业的发展日新月异, 新的测试思想和测试工具已经源源不断出现, 例如大规模自动化部署的Puppet工具, 软件的单元回环测试工具Junit等, 这些开源的软件测试工具已经成为行业软件测试解决方案的必不可少一部分, Jenkins就是这些开源集成测试软件的典型代表。

1 Jenkins和Dev Ops

Jenkins提供了一种易于使用的持续集成系统, 使开发者从繁杂的集成中解脱出来, 专注于更为重要的业务逻辑实现上。同时Jenkins能实施监控集成中存在的错误, 提供详细的日志文件和提醒功能, 还能用图表的形式形象地展示项目构建的趋势和稳定性。

Dev Ops是近年来在欧美软件业流行起来的一个概念。它主要是指软件开发、运维和质量保证三个部门之间的沟通、协作和集成所采用的流程、方法和体系的一个集合。是人们为了及时生产软件产品或服务, 以满足某个业务目标, 对开发与运维之间相互依存关系的一种新的理解。

持续集成是一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作, 甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证, 包括自动编译、发布和测试, 从而尽快地发现集成错误, 让团队能够更快的开发内聚的软件。

IBM作为业内领先的软件服务供应商, 一直致力于加快软件测试周期, 增强软件的可用性和强度。近年来, IBM提出了一系列的软件自动化解决方案。ISD (Ibm System Director) 是一套高效的跨平台企业环境管理软件。图1描述了IBM在ISD的开发和测试流程中采用了Dev Ops架构和Jenkins。本文首先描述了Jenkins的基本特性和易定制的特性, 然后重点介绍通过自定义插件的开发。本文正是基于IBM的私有云 (SCE) 上Jenkins的插件开发的概述。

2 Jenkins插件开发

2.1 Jenkins插件开发环境建立

基于最新的eclipse (Juno) , 它已经嵌入了最新的maven插件。

首先需要修改系统环境变量, 使其指向maven的可执行目录, 然后在dos命令行执行:mvn-version, 如图2所示。

配置文件, 对于本例{SDE root}/eclipse/apachemaven-2.2.1/conf/setting.xml

如果这个配置文件已经存在, 只需修改在之间的部分。

实例配置文件如下, 自定义的目录可以修改:

2.2 创建一个新插件

在dos命令行模式下, 执行mvn hpi:creat来创建一个新的插件。

在创建插件成功时, 参考如图3所示的dos命令行提示。

将创建的插件的骨架 (skeleton) 导入eclipse进行代码的填充。打开SDE选择导入maven项目, 程序会根据刚刚生成的插件骨架自动生成相应的项目文件。

在eclipse项目project view下可以看到本实例的代码的基本架构, 自定义的代码部分在/src目录下, 最终得到的目标插件在/target目录, 如图4所示。

Analyze Project Areas Contributors AndRoles.java的部分代码, 可以充分的调用Jenkins的API进行从而其对整个项目的build过程实时的监控和持续测试。

2.3 编译自定义的插件

在完成自定义功能性代码的填充后, 进入build过程, 首先执行Maven clean清除上一次可能的残余对编译的干扰, 然后选择执行Maven build。

在这个过程中, 可能需要对代码进行调试以使其通过最后的build, 最后完成后就出现了可以用于debugging和deploy的插件的实例了, 如图5所示。

可以对在dos命令行运行mvn hpi:run就可以启动一个已经部署了插件的Jenkins实例, 如图6所示。

3 结束语

本文Jenkins的实例开发流程简洁地描述了在Jenkins插件开发的一般流程, 由于Jenkins是一个强大的可定制的持续性测试环境, 功能和特性繁多, 本文限于篇幅不能一一赘述。IBM的中国研发实验室 (CDL) 成功地将Jenkins集成到Dev Ops架构的环境中, 成功地进行了ISD和一系列大型软件的测试工作, 取得了很好的效果。本文只是作者在实习期间对强大的Jenkins的一点总结和概述, 指在对希望了解Jenkins和对持续性测试的Dev Ops环境有持续性需求的软件测试人员起到抛砖引玉的作用。

摘要:现代软件规模已经极具膨胀, 软件测试所占用的时间的比例也越来越大, 如何提供高效, 快速, 自动化, 可定制的继承测试环境已经成为软件行业亟待解决的问题。DevOps和持续集成是一种软件开发实践, 对于提高软件开发效率并保障软件开发质量提供了理论基础。Jenkins是一个开源软件项目, 提供了一个开放易用的软件平台, 使持续集成和自动化测试成为可能。

关键词:软件测试,持续集成平台,自动化测试,Jenkins,插件开发,DevOps

参考文献

[1]胡艳梅.浅谈自动化测试工具[J].硅谷, 2009 (11) :20.

[2]吴妮妮, 商林.浅谈软件测试方法[J].湖北成人教育学院学报, 2011 (4) :38-39.

[3]金虎.自动化软件测试技术研究[D].四川大学, 2006.

[4]Principles of Software Testing for Testers[Z].TSTITO, 2006.

[5]Essentials of Test Management with Rational TestManager[Z].TST275.2006.

[6]Martin R Woodward.Insights into software testing[Z].Software Focus, 2001.

[7]Elfriede Dustin, Jeff Rashka, John Paul.Automated Software Testing Introduction[Z].Management, and Performance.2003.

[8][EB/OL]http://en.wikipedia.org/wiki/Jenkins_ (software) .

插件开发 篇5

在油气勘探生产阶段,生产管理人员需要及时掌握探井的生产情况,快速查询探井相关的生产数据,以便针对各类生产问题及时进行决策,保证探井生产的正常施工。探井的相关数据来源复杂,数据量大,既包括工区信息、地震数据、井位论证阶段的成果数据,也包括钻井、录井、测井、试油等各类生产数据;数据类型繁多,既包括结构化的表格数据,也包括非结构化的图行文档数据。实时性高,需要掌握最新的生产动态数据。

而在生产决策现场,生产管理人员需要根据决策内容快速、准确、全面的了解单井的基础信息和当前重要的生产情况,以便尽快地得出结论,确定方案或采取各类措施,保证生产的顺利进行。因此需要对单井不同决策点的数据内容进行详细分析,提供给用户一个井的当前状态和重要信息宏观的展示。如何把纷繁复杂的海量数据有机地组织起来,并按照业务内容进行图形化的展示和导航,同时还要重点考虑系统与正在应用的系统的兼容性,既可以独立运行,也可以作为插件集成到已有的大型系统中,这些是本文重点讨论的问题。

2 分析

总体设计思路是采用插件式、模块化、定制化的方式,根据探井动态数据实时绘制井身结构图、试油管柱图进行导航,并且在图形上显示重要的基础数据和生产数据,同时根据决策点的不同定制开发相应的模板,展示相关数据内容。

2.1 总体架构

希望系统能够以插件的形式进行开发和管理。开发人员只需要关心独立的客户端控件和服务器端的业务逻辑组件,然后插入到开发框架中。不同插件之间可以通过发布、订阅消息进行通信。这样可以使每个插件相对独立,降低依赖性,从而可以最大程度的提高业务组件的复用能力。

因此在整体架构上,采用了微软的CAB(Composite UI Application Block Host Plug In)实现客户端的插件管理。

服务端则采用Castle Contain实现服务器端插件管理。

CAB着重于将应用逻辑和界面分开,让应用系统具备更清晰的结构,更强的扩展性、可移植性。采用上述设计的好处是允许构建由各个具有协作关系的独立模块组合成的复杂应用;各模块之间的通信可以通过消息的方式进行,尽量减少相互之间的依赖关系。

通过CAB的统一管理,在本系统中,图形导航、模板定制、数据展示等部分都是相互独立的控件,完全可以在其他部分进行重用。

系统总体结构图如图1。

2.2 模板

由于要满足不同用户对数据展示的需求,需要提供模板定制的功能。系统根据不同的模板来显示不同的图形导航和数据内容。根据业务分析,建立了钻井模板、测井模板、试油模板。模板以XML文件的形式保存在客户端,用户可以进行修改或添加。

2.3 图形导航

图形导航区域以该井的井身结构图或试油管柱图为基础,集成显示该井的重要的设计及动态信息。以动态图形的方式显示套管规格、下深等井身结构数据或各类试油管柱工具数据,并对重要信息进行标示。以图形化地方式把探井当前的实时的生产动态和最重要的生产信息直观的展现在用户面前。

图形导航部分最关键的是井身结构图和试油管柱图的绘制。在本系统中,采用Carnac.NET组件中的WellSchematic.NET组件实现图形绘制及相关功能。WellSchematic.NET是INT公司提供的数据可视化工具集,可以增强图形应用程序的性能和功能。图形导航部分在此基础上进行了开发。

其中图形元素是采用SVG格式的文件,通过XML进行定义和描述的基础元素,在实际应用中,对此进行了扩充和解析。

绘制图形的数据来自通过调用Web Service返回的生产数据。根据需求,在图形上标识井深,主要目的层等基础信息;以图例标识地层分层、试油、钻井取心等重要信息。此信息可以通过模板的形式进行灵活定制。当双击时可以显示数据查询控件的详细信息。图形具有放大、缩小、适应高度/宽度、标签显示/隐藏、图形导出打印等常用功能。

2.4 数据服务设计

探井生产过程包括钻井、录井、测井、试油等阶段,产生了海量的生产数据。从数据类型上分析,主要包括图形文档类数据、生产动态数据。

2.4.1 图形、文档类数据

重要的探井相关的文档类数据。包括前期的综合研究成果、各类设计报告、总结报告、单井评价报告、测试卡片等等。这类数据多以word、excel、ppt、jpt、gif等格式进行存储。

2.4.2 生产动态数据

包括探井设计数据、钻井基础数据,分层数据、井身结构数据、钻井液数据、分段泥浆、岩屑录井、测井解释成果、中途测试、油气水分析、试油成果、分析化验等等。此类数据来源于各级、各生产专业数据库,由多个分布在不同物理环境的Oracle和SQLSERVER数据库构成。

由于数据来源和数据格式复杂,存储类型不同,因此需要针对各类异构数据库开发统一的数据服务接口并进行封装,便于不同的客户端和应用通过统一的接口进行调用。

因此,数据访问采用了Ibatic.Net+WebService的方案。通过定义对不同数据源的访问接口,实现对异构数据库的访问。

在数据服务设计方面,一个非常重要的部分就是确定领域模型,这一部分的工作是与具体的业务密切相关的。另外,需要根据领域模型分析多个异构数据源,建立与数据库的映射关系,也就是ORM部分。通过将领域模型与数据库完全独立,允许双方能够独立变化,从而提高系统的扩展性和可维护性。

通过Web Servic来调用相关数据对象,可以满足不同客户端,不同系统调用相同业务模型的需求,从而提高系统的复用性。

该部分的简单设计图如图2。

(1)UI层控件设计

设计完成了通用数据显示控件。通过改写扩充DataGridview控件和Label控件,开发通用的数据显示控件。自动绑定返回的IList对象,实体类中的属性的汉字说明作为显示列的名称。可以通过此控件显示所有返回的数据对象。该控件还具有以下功能:

1)数据列定制

可以自定义需要显示的数据项,定制XML文件保存在本地,用户可以选择显示定制列还是显示所有数据项。

2)数据导出

设计对Excel的读写控制类,用户可以把查询的数据导出到Excel保存。

(2)领域模型设计

由相关业务专家确定各个领域模型,在系统中以实体类的形式进行管理。

(3)ORM设计

通过IBATIS的Map文件进行映射。特别需要说明的是,由于需要对Oracle数据库的Blob字段进行读取,Oracle客户端版本需要升级到10g,否则IBATIS无法实现对Blob字段的操作。

(4)WebServic设计

通过建立服务端的WebService,可以满足不同的模块、系统对数据的调用。

通过上述设计,本系统较好地达到了建设之初的目标,目前已经在某大型能源企业的日常生产中进行了成功应用,并很好地与已有的某大型系统兼容,系统初始界面如图3。

3 结语

(1)业务领域模型建立路线,实现业务驱动体系。这是系统构架设计的首要标准。系统开发的最终目的是为业务服务,所采用的技术和架构也必须能够满足业务的需求。

(2)坚持软件构件化模型设计思路。即分层次、分业务,逐步形成不同粒度的企业应用构件,使企业应用开发达到高度的复用和共享。

(3)应当遵循已有的规范,考虑与现有系统的接口。大型企业目前一般都有较为成熟的软件体系和数据管理体系,进行新的开发时应当考虑与现有系统的兼容和接口问题。

摘要:本文采用插件式、模板化的设计思路,在Windows.NET平台下实现了以井身结构图和试油管柱图为图形显示导航,集成显示探井在不同生产阶段的重要生产数据,为用户提供了井当前状态和重要信息宏观的展示平台,为探井生产管理提供依据。

插件开发 篇6

关键词:Lua,PDXP协议,插件

0 引 言

PDXP协议是一种专门用于传输测控网关键信息的私有协议,测量船与陆地控制中心传输的实时测控数据均为此协议。测量船测控信息传输链路曾出现过丢包、乱序现象,因此及时发现并掌握PDXP数据的丢包、乱序情况,对快速、准确定位传输链路问题至关重要。

目前,测量船主要采用支持Lua开发的Wireshark商用抓包软件对PDXP数据进行抓包监视,但此软件没有对应用层PDXP协议的解析,并且也不具有丢包、乱序的发现和提示功能。本文在Wireshark软件平台上利用Lua脚本语言完成了PDXP数据的完整解析,并运用PDXP数据报包头中相关字段的关联规律,对是否丢包、乱序进行判断,开发出了嵌入式的PDXP协议分析插件。

1 PDXP 协议介绍

PDXP数据报的格式如图1所示,PDXP的应用包头包括版本、信源信宿地址、包序号等8个字段内容。

报头内各字段的具体含义为:

( 1) 版本( VER)

VER用于标识协议版本。

( 2) 信源地址( SI) 与信宿地址( DI)

SI、DI用于标识信息的生成方和接收方。

( 3) 数据标志( BI)

BI唯一标识应用数据包内数据域的内容。

( 4) 包序号( No. )

No. 包序号为某一端到端通信双方发送同一数据标识( BI)的数据包累计计数。

( 5) 数据处理标志( FG)

FG用于标识应用数据包的基本处理要求。

( 6) 预留字段

系统保留使用,固定填[00000000]。

( 7) 发送日期( DATE)

DATE为信源发送该数据包时的日期。

( 8) 发送时标( TIME)

TIME为信源发送该数据包时相对于当日零时的积秒,量化单位为0. 1ms

( 9) 数据域( DATA)

DATA承载需要传输的各类有效数据。

2 设计原理

2. 1 Lua 语言

Lua是一个小巧的脚本语言,代码简洁优美,几乎在所有操作系统和平台上都可以编译、运行。在目前所有脚本引擎中,Lua的速度是最快的,这也决定了Lua是作为嵌入式脚本的最佳选择。LUA有如下特性:

( 1) 轻量级Lua语言的官方版本只包括一个精简的核心和最基本的库。这使得Lua体积小、启动速度快,从而适合嵌入在别的程序里。

( 2) 可扩展Lua并不象其它许多" 大而全" 的语言那样,包括很多功能,比如网络通讯、图形界面等。但是Lua可以很容易地被扩展: 由宿主语言( 通常是C或C + + ) 提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。

( 3) LUA还具有其它一些特性。例如同时支持面向过程编程和面向对象编程; 自动内存管理; 提供一系列数据结构,包括数组、链表、集合、字典、散列表等; 语言内置正则表达式匹配;提供多线程支持等等。

2. 2 PDXP 数据包解析原理

在Lua脚本文件中编写自定义的协议解析器dissector,定义PDXP数据包各字段的变量VER、SI、DI、BI、No、DATE和TIME,构造PDXP协议域。读取缓存Buff中的数据后,通过相关函数解析后填入PDXP协议域。利用Tree Items函数将PDXP协议域加入Wireshark的包详情面板中,实现PDXP数据包包头字段的解析功能。图2为软件编程的流程图。

2. 3 PDXP 数据包丢包、乱序判断原理

PDXP协议数据包以SI、DI和BI为标识符,其标识包序号是公差为1的递增等差数列,发送时标同样递增。本分析插件对wireshark抓取的PDXP数据包以抓包时间为顺序进行排列。

正常时,所抓第i个数据包的标识包序号为i + N( N为固定值) ,所抓第i - 1个数据包的标识序号为i - 1 + N( N为固定值) ,设所抓第i个数据包的发送时标为ti,与所抓第i - 1个数据包的标识包序号差值为Δi,则ti > ti - 1,Δi = 1。因此可根据以下4个条件对数据传输情况进行实时判定:

1 ) 若Δi > 1,则判定第i个与第i - 1个数据包之间有丢包;

2) 若Δi < 0,且ti < ti - 1,则判定第i - 1个数据包发生乱序;

3) 若Δi < 0,且ti > ti - 1,则判定数据被重新发送;

4) 若Δi = 0,且ti > ti - 1,则判定有重复包。

图3为丢包、乱序判断的流程图。利用Text Window函数生成自定义插件窗口,将上述的判断结果按照规定格式进行文本显示。

3 功能实现及应用

该插件作用于信息流监视终端的Wireshark软件上,对经过试验任务IP网双平面路由器广域网口的数据进行分析。使用Wireshark内置Lua脚本引擎,编写Lua脚本语言开发PDXP数据包分析插件。该插件具备以下4个功能:

1) 进行实时抓包数量统计;

2) 对丢包、乱序情况实时提示并保存;

3) 解析并显示已保存数据包的全部信息;

4) 查找数据包丢包、乱序情况。

具体源程序如下,首先定义好议解析器dissector域中的各个字段。

这样包详情面板中就会顺序显示PDXP协议数据的各个字段,并且会解释字段中数据的含义,从而实现PDXP的完整解析。

对于丢包、乱序的判断,依托于对PDXP的完整解析。首先定义全局变量包序号packet_no,通过上面程序的解析后,用来判断与前一包包序号的关系。

在实际的应用中,插件在监视网络数据包状态方面起到了不错的效果。图4至图7为实际情况中的抓包情况。图4为正在抓包时的包数统计截图,按照PDXP数据包的BID、源地址和目的地址进行分类统计。

图5为正在抓包时出现丢包、乱序的提示截图,对丢包、乱序的包序号、源地址、目的地址以及丢包数进行显示。

图6为对已保存数据包进行相关信息显示截图,主要显示数据包的包序号,以及和前一包包序号的差值,方便岗位人员查看。

图7为对数据包进行丢包、乱序情况查找。

4 结 语

本插件通过实际实验的检验,已实现对PDXP数据包传输情况的分析、判断,岗位人员能够直观地监视并掌握数据的传输情况。由于Lua脚本语言作用于Wireshark软件中,只对数据包进行分析判断,无任何修改,因此不会影响抓包数据的真实性以及传输连链路的可靠性。

参考文献

[1]邓楠乔,秦开宇,金燕华.基于Lua的面向组件程序设计研究[J].中国高新技术企业,2010(6):45-47.

[2]莱鲁萨利姆斯奇.LUA程序设计[M].2版.北京:机械工业出版社,2008.

[3]祖兆研.基丁插件技术的软件架构设计及应用[D].南京:河海大学,2007.

[4]段禽,孙伟力,陈宁.嵌入式Lua脚本远程调试设计[J].数字技术与应用,2011(3):102-103,106.

[5]邹光先.Lua中面向对象的编程机制[J].程序员:游戏创造,2007(2):89-91.

[6]李英明,闫志辉,周水斌.基于Lua脚本语言的嵌入式UART通信方案设计[J].单片机与嵌入式系统应用,2012,12(4):29-32.

[7]胡波,张秋峰,牟善峰.LUA脚本语言在通信网管中的应用[J].中国新通信,2012(16):50-52.

插件开发 篇7

GIS开发是一项针对性很强的系统工作, 程序的模块设计、层次划分、语言选择和系统部署都依赖最终用户的具体需求、软硬环境甚至个人的喜好。GIS开发是一种典型的“因势而变”的工程, 由于不同类型的用户在地理数据的存储、使用和部署方式上都有很大差别, 根据实际需求定制开发是不可避免的。因此在应用程序开发过程中, 项目人员必须花费大量的时间进行项目前期调研, 编制不同阶段的需求分析和建设方案, 然后才能进入编码阶段, 根据需要开发各种功能组件。由于需求蔓延的可能性依然存在, 每个变化之后, 又得浪费时间在菜单建立、工具栏按纽设计、增加映射代码等, 每一次都要从头开始, 舍弃以前项目经验和成果, 这种软件开发显然是一件乏味的且充满重复的劳动, 开发模式效率很差的工作。因此代码重用在开发中显得非常重要, 为实现这一目标, 软件人从函数库、类库、设计模式和框架等机制先后被提出, 不断改进提高软件的生产效率。而框架是重用机制当中的一种高级类型, 在结构复杂、需求多变的各种规模程序设计上具有很强的吸引力。

插件技术是组件复用技术的一种。组件技术从根本上克服了传统软件开发技术固有的代码重用率差、模块耦合度高、可维护性差、开发周期长等问题, 成为现代软件发展的主要趋势。插件技术能在不修改程序主体的情况下对软件功能进行提升。在众多的软件中都可以看到它的身影, 在中小型软件系统中获得了广泛的应用。基于“平台+插件”的结构有助于开发者实现一个具有良好扩展性和定制能力的GIS项目。例如在著名的开源软件MapWindow GIS中使用了大量的插件, 如数据格式转换与投影变换等GIS功能。

1课程概况

当前, 国内外关于GIS应用开发教学的理论和实践的研究不是很多。只是在程序设计领域, 如周红鹃、贾丹、刘东良等人设计开发教学软件时使用了插件思想完成教学构思。随着越来越多的高校GIS专业开设GIS设计与开发课程。多数高校该课主要包含理论课和实践课部分, 理论课多是以ArcEngine、ArcObjectts、MapObjects或其它GIS公司组件为基础内容, 重点讲授GIS开发的原理与方法, 阐述GIS组件的功能与开发应用, 而实践课没有统一的定论, 许多实验课程教学还是引用传统的教学模式, 在组织教学时, 教师往往按照教材编排的顺序, 实验往往就是一个以知识点为核心的理论教学为主, 验证性实验为辅, 各个实验之间前后衔接不好。

如果在实验课中, 按逆向工程教学, 先拆分GIS功能后组装, 最后实验课总体设计应该就是一个小型GIS应用系统。那么使用插件式GIS应用框架教学就是一种满足定制要求的最好方式--扩展方便、部署简单和高度重用。同时学生自己动手设计与之相符合的实验教学内容, 在日常实验过程当中学习插件思想, 每个人结合自己可能的毕业设计框架实例入手, 循序渐进的体验框架设计思想和代码迭代实现过程, 理论与实际相结合, 那么最后的课程设计作业将不只是一个学习GIS开发的简单功能的Demo, 如将空间关系的基本分析以插件封装, 具有重要的意义与价值, 在实验过程中不断积累的插件功能也能在日后的项目中得到很好的应用。

2基于插件技术的GIS开发教学设计

2.1插件原理

插件 (Plug-in, 又称addin、add-in、addon或add-on, 又译外挂) 是一种电脑程序, 是一种符合一定规范, 实现了特定接口的程序, 主要是用来扩展软件的功能通过和应用程序的互动, 用来替应用程式增加一些所需要的特定的功能。最常见的有游戏、网页浏览器的插件和媒体播放器的插件。它借鉴了硬件系统中插件的思想。

常见的插件构架, 主要有以下四大类:脚本式, 使用某种语言把插件的程序逻辑写成脚本代码, 如Python, 不足之处在于用户可以自行修改脚本; 动态函数库 DLL, 宿主程序通过某种渠道获得插件 DLL中的函数签名, 然后在合适的地方调用它们, 如Matlab软件当中的动态库函数;聚合式, 把插件功能直接写成 EXE, 主程序除了完成自己的职责外, 还负责调度这些“插件”, 宿主程序与插件之间信息交流困难, 《人月神话》当中的巴比伦塔的失败说明这种方式的不足;组件, 宿主程序不需要知道插件怎样实现预定的功能, 它只需要通过接口访问插件, 并提供主程序相关对象的接口。主程序与各插件之间的信息交流简单、透明。如目前支持Java 的Java Plug-in Framework、 OSGi, 支持.NET的.NET Add-In Team Blog 、Mono Add-ins , 支持C++ 的FxEngine Framework、Qt Plug-Ins 等。

通常一个插件式框架包括以下三个部分。

(1) 宿主程序:

即主程序部分, 提供程序的主体框架, 是插件的依附对象。

(2) 框架插件:

即程序的功能扩展部分, 是插件式框架功能的承载者。

(3) 框架协议:

预先定义好的、宿主和插件间的通信契约规范, 即确定了宿主能够解析什么内容, 以及插件需要实现什么内容。

2.2教学引例-计器算器插件开发

2.2.1 用普通方式实现运算——从早绑定到反射

普通方式新建一个运算Calculator类库, 并添加对类的代码引用就可以;如果要扩展计算器功能, 如增加乘法运算, 先编译成Mult类库, 然后右击引用, 选择添加引用该命名空间, 即通过早绑定来完成。

如果再要增加除法运算, 可如增加乘法运算一样增加divi类, 生成动态库Divi.dll, 可运用. NET平台上的反射技术。反射可以用编程的方式检查程序集, 获得该程序集的信息, 包括其中的所有对象类型。通过反射技术从程序集中读取接口信息, 并从接口中获取生成按钮的相关信息, 如名称、显示的图片等。运用反射技术在识别插件方法时可以去除switch或if, 解除分支判断带来的耦合。先编译以下类, 然后再通过反射机制读取。

2.2.2 插件方式

编写框架协议, 即接口IPlugin, 并添加代码。

3原理演化:GIS功能插件开发

当前, 在面向特定专题或领域的地理信息系统平台开发中, 主要采用插件式GIS开发。对照前面的例子, 分别完成宿主程序、框架插件、框架协议。

将GIS应用开发当中的命令按钮、工具条、菜单、浮动窗体等经常用到的功能以接口形式做成插件。

以下是基于插件式GIS应用框架的插件思想, 各个工具栏菜单等使用插件开发, 图1为教学实验设计开发的全插件人口GIS原型系统插件框架。

4结束语

当前各大GIS厂家都提供了GIS二次开发功能组件, 将GIS开发当中一些功能封装成组件, 如ArcEngine软件包, 便于二次开发做成插件。如果在GIS应用技能开发实验课当中引进插件思想, 通过不断积累实验过程, 积累一个个灵活、健壮的插件, 对日后较大规模GIS软件项目开发很有益处。另外通过插件开发, 将任务分解给不同的学生, 不断模拟任务执行, 符合自我构建的学习过程。让学生在每节课都体验任务的推进, 也会减少GIS开发课程的枯燥, 增强教学效果, 吸引学生学习。该种教学方式也比较符合智能化学习、游戏化学习的现代学习理论的需求和发展趋势。

摘要:GIS插件开发是GIS应用技能的一个重要组成部分。从GIS插件开发环境所要解决的实验内容衔接问题着手, 设计了一种从运算器功能到GIS功能开发的插件式GIS应用框架教学设计案例。该插件GIS框架扩展方便、部署简单和高度重用。

关键词:插件技术,GIS开发,教学

参考文献

[1]蒋波涛.插件式GIS应用框架的设计与实现[M].电子工业出版社, 2008.

[2]ESRI INC.Getting started with ArcGIS[M].CA:ESRIInc, 2004.

[3]刘仁义, 刘南.ArcGIS开发宝典-从入门到精通[M].北京:科学出版社, 2006.

[4]李俊娥, 周洞汝.“平台/插件”软件体系结构风格[J].小型微型计算机系统, 2007 (5) .

[5]周红鹃, 胡学钢, 田卫东.面向多层次用户的可视化数据结构实验环境研究[J].吉林大学学报信息科学版, 2005 (s2) .

[6]贾丹.计算机软件专业基础课程教学改革与实践[J].渤海大学学报 (自然科学版) , 2009 (3) .

[7]刘东良.基于约瑟夫问题与插件树的《C语言》教学动画演示软件开发研究[D].南京:南京师范大学, 2009.

[8]维基百科.插件[EB/OL].2009-04-12.http://zh.wikipedia.org/wiki/Plug-in.

[9]JACK H HANSEN.C#插件构架实战[EB/OL].2009-04-12http://www.cnblogs.com/wayfarer/articles/28537.html.

[10]高慧萍, 吕俊.插件式开发技术研究与实现[J].计算机工程与设计, 2009 (16) .

[11]FREDERICK P.BROOKS, JR.人月神话[M].北京:人民邮电出版社, 2007.

插件开发 篇8

使用像ASP,PHP,或者CFML这样的基于过程化开发的语言来开发一般的Web应用程序,它们的输入、处理和输出都不能很好地进行分离,因而很难体现出业务模型和业务重用性,以至于代码难以结构混乱和难以维护。虽然有经验比较丰富地开发者会将数据从表示层分离开来,但这不是很容易做到的,它需要精心的计划和不断的尝试。MVC从根本上强制性的将它们分开。MVC三层模式的好处显而易见,由于运用MVC的应用程序的3个部件是相互对立,改变其中一个不会影响其他两个,所以依据这种设计思想能构造良好的松偶合的构件。

MVC有它的优点,由于在抽象出业务处理的模型时,虽然能够屏蔽掉其他层次不相关的处理细节,但也限制了与之相关的功能扩展。或者可以根据MVC分离式设计,经由修改内部代码来扩展功能和业务,但好的扩展性是体现在添加而不是修改。需求总是会变的,若要扩展业务或功能时,开发人员就不得不重新在模型里面添加代码甚至改变内部结构以适应新的需求。

2 插件式设计

插件式设计模型如图1所示。

基于插件式设计比起许多设计模式更简单,更容易理解。基于插件设计的应用程序由应用程序框架、插件接口、插件和公共函数库4部分组成。

应用程序框架负责应用程序的整体运作,它清楚程序整个流程,但并不知道每个过程具体要做什么。它在适当的时候调用一些插件,来完成真正的功能。插件接口是一个协议。插件按照这个协议实现出来,就可以加入到应用程序中来。当然,对于复杂的系统,插件接口可能有多个,各自具有独立的功能。插件是完成实际功能的实体,实现了要求的插件接口。尽管实现什么以及怎么实现,完全是插件自己的自由。在实际情况,一般还是有些限制,因为插件接口本身可能就是一个限制。如,实现编译功能的插件,自然不能实现成一个聊天功能的插件。公共函数库是一组函数或者类,应用程序框架和插件都可以调用。它通常是一个独立的库。应用程序框架本身是公用的,是代码复用的一种方式。但并不是所有可复用代码都可以放在框架中,特别是插件会用到的公共代码,那会造成插件对框架的依赖。把这些公共代码提取到一个独立的库中,是一种好的方法。

3 开发设计模型的改进

基于笔者对MVC模型的一点看法,插件式设计为系统设计找到一个平衡点,它能把扩展功能从框架中剥离出来,降低了框架的复杂度,让框架更容易实现。扩展功能与框架以一种很松的方式耦合,两者在保持接口不变的情况下,可以独立变化和发布。公开插件接口,让第三方有机会扩展应用程序的功能,共同分享成果。

为更好地体现出系统的灵活性和可扩展性,本系统采用了MVC三层模式开发和插件设计的混合开发模式,实现表现层和业务层的分离,加上事件处理(Action)和过滤器(Filter)处理的机制,在系统适当的地方,放置相关的钩子(Hook),即插件接口,来运行用户扩展的功能插件,如在数据库存取数据时,进行格式化数据。

3.1 系统整体模式架构

系统整体模式架构如图2所示。

3.2 插件式开发架构

系统提供通用插件接口:

init:

位置:初始化模型Init_model

说明:系统函数库或类库装载完毕,准备初始化插件,通常在插件被加载时调用。

shutdown:

位置:系统扩展钩子Generate系统关闭,让插件停止。

至于插件要完成什么功能,要插到哪里,在执行init后决定,它调用公共函数库里的函数把自己注册到系统中某个位置。

专用插件接口:

这些插件接口是专用的,看到它的接口函数说明,就可以大致了解它的功能了。如edit_post、delete_post。

3.3 模块结构

标签模块(helpers/template-tags)用于前台视图的内容显示,包括6类标签库;业务模块:业务辅助函数库helpers目录下的为数据的获取、处理及输出、Helpers/admin目录下的为相关数据库的数据跟新、删除和添加操作;控制模块(controllers目录下)控制器模块主要分为前台控制器(GeneralController)、后台控制器(admin/PrivilegedController),还有安装控制器(setup/VXblog),扩展钩子(setup/Setup、Generate)。前台控制模块GeneralController

目录位置:controllers/。个前台控制器子类均对应不同的浏览方式,或操作(Comment对应浏览者的发布评论操作,Postpass进行对密码保护的文章验证操作)。台控制模块PrivilegedController后台控制器有两种工作方式,加载存在的视图模板和执行相应的$action操作;装控制器负责系统的安装(创建数据库配置文件、创建数据表、初始数据的录入);展钩子:实例化控制器前检查系统是否已经安装,若没有数据库配置文件中则执行安装程序;成器:Generate:在控制器操作执行完毕后,如果是前台控制器,则定位到相应的模板执行显示输出,此位置同时放置了shutdown的插件接口,为插件提供系统关闭时的插件接口;驱动模块Init_model:用于加载类库、函数库和系统运行前的基本配置;系统初始华完毕后,启动init接口操作,为插件提供系统正式运行前的加载或处理操作。

4 核心模块设计

系统核心模块的流程如图3-图5所示。

5 基准测试统计数据

基准测试统计数据如表1所示。

6 结语

尽管提出一种结合插件式设计的开发模型,为系统提出一种扩展办法,但一种开发模型并不能解决所有的问题,而且还需要付出相应的代价和努力,还有许多仍待解决的缺陷和不足。同时,插件式开发在插件接口上的问题也如出一辙,问题同样出于插件接口的管理,放置插件接口的地方和时机的考虑并不容易;插件接口越多、可开发的插件种类就越多,不同种类的插件可能对应用程序造成的许多不同问题;插件越多,系统的资源开销就越大等。

参考文献

[1](美)Alan Shalloway,James R.Trott.设计模式解析(第2版)[M].人民邮电出版社.

[2](澳)Hugh E.Williams,David Lane,PHP&MySQL Web数据库应用开发指南(第二版)[M].东南大学出版社.

[3](美)(Vasani V).,MySQL完全手册[M].电子工业出版社.

[4](美)Michael Blaha,James Rumbaugh[M].UML面向对象建模与设计(第2版).民邮电出版社.

[5]李金明.中文版Photoshop CS3完全自学教程[M].人民邮电出版社.

上一篇:工作实习下一篇:初中班集体的建设方法