3.11.2编写附加的服务器
所有的附加方式(插件方式加入设计资源管理器)的Protel服务器,使用相同的方法来编写。设计管理器的模式架构,使其易于为您集成已存在的软件到设计管理器环境中,并且免除了数据传送和用户接口定义。SDK工具为您构建一个附加的服务器工程,一个BorlandDelphi 3或5版本,并提供丰富的API功能,剩下的就是要充分发挥您创造力。
图1-46描述了开发一个附加的服务器所需要了解的知识,例如,如果您想开发一个产生自定义报表的服务器,那么您需要读一读提高篇中“第三章原理图API”和“第四章印制板 API手册”,精通篇中“第八章Protel 99数据提取和系统集成”和“第九章Protel 99与COM开发”,以及附录篇中API参考手册等章节。

图1-46 SDK路线图
如果您想为Protel设计资源管理器开发编译一个您自己的服务器,那么您需要使用Protel的运行时间包,CSRTL.DPL(Delphi5 版本为CSRTL50.BPL),运行时间包允许您在服务器之间相互共享代码,减少代码编写量。
如何在您的服务器应用程序中使用Protel运行时间包呢?使用运行时间包非常简单。首先在Delphi IDE中加载或创建一个项目,选择菜单“Project”->“Options”菜单项,再选择“Packages”标签页,选中“Build With Runtime Packages”检查框,并且引入“CSRTL”或“CSRTL50”运行包到SDK路径中,如图1-47所示。

图1-47 显示运行包对话框

图1-48 检索路径对话框
图1-48显示了如何来设置检索路径,“\RTL3\”或“RTL5\”,具体取决于您使用的Delphi编译器版本,选择菜单“Project”->“Options”,在“Directories/Conditionals”页上来设置SDK的检索路径。
设置好运行时间包和检索路径后,当您为设计资源管理器来创建一个服务器时,还需要把SCH、 PCB或Spread API等所需要的单元加到的服务器工程中的源代码uses代码段中,这些API单元已在CSRTL或CSRTL50包中引用,否则,会得到编译错误信息,编译器将提示说找不到某个过程或方法。
4. 服务器制作向导所产生的源代码
上面,我们已了解清楚SDK基本情况和SDK向导产生服务器架构过程,本节详细列出SDK所产生各种类型文档,使您对SDK有更进一步认识,别着急,当您读完本书时,一定能从SDK开发的初级选手上升为SDK开发人才,要的只是耐心、认真、执著、时间和不断实践。
|
服务器类型 |
源代码 |
描述 |
可安装文件 |
|
Editor 编辑器 |
DLL, INS, RCS, HLP* |
||
|
MyServer.dpr |
工程文件。 |
||
|
MyServer.dof |
编译器设置文件。 |
||
|
Abstract.pas |
TabstractServerWindow类。 |
||
|
Common.pas |
TCommonWindow类继承自TabstractServerWindow类,是不同文档类型的通用类。 |
||
|
Editor#n.pas Editor#n.dfm |
编辑器源代码。 编辑器窗体。 |
||
|
Panel#n.pas Panel#n.dfm |
面板源代码。 面板窗体。 |
||
|
Wizard 高导 |
DLL, INS, RCS, HLP |
||
|
MyServer.dpr |
工程文件。 |
||
|
MyServer.dof |
编译器设置。 |
||
|
Wizard.pas |
向导源代码。 |
||
|
Wizard.dfm |
向导窗体。 |
||
|
Utility 实用工具 |
DLL, INS |
||
|
MyServer.dpr |
工程文件。 |
||
|
MyServer.dof |
编译器设置文件。 |
注意:Editor#n和Panel#n文件指出了编辑服务器能支持多少文档类型,例如,如果有两种文档类型,将分别会是Editor1,Panel1,Editor2,Panel2。下列的文件对以上三种服务器来说,是通用的、共有的文档:
|
一般文件 |
描述 |
|
Comtable.pas |
此单元有命令的启动者表,也就是此服务器所支持的进程的列表,在此单元中,定义此服务器所支持的进程。一个服务器可有多个进程。 |
|
Commands.pas |
服务器类,此类是一个继承自TServerModule对象的对象。此对象为与设计资源管理器通信而操作所有底层协议。当SDK为我们产生好服务器构架后,我们自己就可在此单元是编码代码,随便写什么代码,只要这种代码所完成的功能是您想要服务器来执行的任务,当然,前提条件是您会使用Delphi开发工具,了解Pascal语法。 |
|
Main.pas |
此单元负责创建和销毁服务器。对于文档编辑器型服务器,通过此服务器实现支持的不同的文档类型,因而,服务器需要正确支持被连入的接口单元。 |
4.1 源代码文档文件
Protel SDK能产生联机帮助文件和能被关联到您的EDA应用程序的必需的联机用户手册。Protel SDK将创建两类文件,一类文件富文本格式,另一类文件是带有.HPJ为扩展名的联系手册。带有.HPJ为扩展名文件是帮助文件,您能使用您更喜欢的帮助文件编译器来编译这些文件。您如果有每一个服务器进程和它们的参数的正确文档,您将能为您的服务器编译一个完全的参考帮助文件。如果您想要有一个“how-to”(如何进行)类型帮助文件,您就能使用您的编译器选择来产生其它的.HLP文件,并且编译连接到自动产生的帮助文件。
如果您运行了“创建您的第一个服务器”例子,从Protel SDK的“Tools”的选择菜单项中,您钩(√)上“Generate Help”和“Generate Manual”选项,服务器向导产生了三种文件,为您的服务器产生出帮助文档。这些在源文件中的文本,起源于在服务器向导文档中所输入的信息(MyServer.SRV),因此,在向导中输入所有描述和备注的字段信息,信息应尽量的完整和正确是很重要的。所产生的文件分别是:MyServer.rtf, Myserver.hpj和Manual.rtf。
4.1.1MyServer.rtf
Myserver.rtf文件是一个富文本格式的文档,编码适合于帮助文件。在此文件中的列出所有定义在服务器图表中的进程,和它们的描述及参数备注。因此,在向导中输入所有描述和备注的字段信息,信息应尽量的完整和正确是很重要的。此文件和MyServer.hpj文件一起被使用,可以用一个适合的标准的WinHelp编译器工具来编译帮助文件。
4.1.2MyServer.hpj
MyServer.hpj文件是一个WinHelp编译器的信息文件,此文件包含使用一个基本的WinHelp编译器,来转换MyServer.rtf文件到联机帮助文件所必须的信息。
4.1.3Manual.rtf
Manual.rtf文件是一个富文本格式的文档文件,比较适合作为纸介质手册打印出来,或者适合作为Adobe Acrobat格式的联机手册,用于电子阅读。在此文件中的文本列出所有定义在服务器图表中的进程,和有它们的描述及参数备注。因此,在向导中输入所有描述和备注的字段信息,信息应尽量的完整和正确是很重要的。
联机手册是自动以富文本格式产生的,能被微软Word应用程序打开。如果要产生PDF格式,您需安装PDF生成程序到系统中,用程序打印将产生一个.PDF文件,此文件能被Acrobat Reader读取(从在Internet和环球网的Adobe和多个网站上可得到Acrobat Reade,Acrobat Reade是自由的),Acrobat Reade可以把联机手册打印成纸介质。
RTF文件的第一页将是目录页,按字母表列出所有的进程,在下面是一个页,描述了每一个进程,此描述根据您在向导的服务器进程对话框中所输入的进程信息构建出来的;
Summary:属性标签描述行
Content:目录标签
Parameters:参数标签
4.2 SDK运行时间库包
Protel SDK包允许您自设计资源管理器中连接到您的服务器。SDK有两个不同的运行时间包,分别被Borland Delphi 3和Borland Delphi 5所构建,CSRTL运行包和ProtelComponents设计时间包。CSRTL运行时间包和ProtelComponents设计时间包(如是Borland Delphi 5,为CSRTL50和ProtelComponents50)允许在设计资源管理器服务器当中共享代码。这些运行时间包能被在Protel的SDK安装目录 “\RTL
|
CSRTL 单元 |
描述 |
|
rt_forms |
此单元包含大多数主要的系统函数和类。此单元的主要的部分有:TServerWindow和TPanelWindow类;TLock类声明;TServerModule类声明;文档枚举;和状态条接口函数等。 |
|
rt_Param |
此单元包含参数进程所有的函数和类声明。 |
|
rt_deb |
此单元包含调试函数。 |
|
rt_FileUtil |
此单元包含几个为操作设计文档所用的文件名称字符串函数。 |
|
rt_Types |
此单元包括所有的系统类型声明和所有的系统消息定义。 |
|
rt_Launc |
此单元实现进程表。 |
|
rt_Route |
此单元为到Router动态连接库的接口。 |
|
rt_DDB |
此单元有到设计数据库文件的例程接口,也封装几个DDB单元。 |
|
ClientTypes |
此单元包含客户端应用程序类型。 |
|
ClientProcs |
此单元包含客户端应用程序API函数的调用。 |
|
ClientClass |
此单元包含客户端应用程序类。 |
|
SchAPITypes |
此单元包含SCH服务器类型。 |
|
SchProcs |
此单元包含SCH服务器API函数的调用。 |
|
SchClass |
此单元包含SCH服务器类。 |
|
PCBTypes |
此单元包含PCB服务器类型。 |
|
PCBProcs |
此单元包含为PCB服务API函数的调用。 |
|
PCBClass |
此单元包含PCB服务器的类。 |
5. 本书提供的代码例子
SDK安装好后,会在“\SDK\Examples\Server Examples”文件夹中产生很多例子。本书对其中大部份主要例子作了说明和分析注释,请您能很容易看明白。原SDK中有些代码有一些错误或功能上缺陷,笔者也作了修改,使其正确无误。
为了使于读者学习,笔者把原SDK提供的一些例子进行了详细分析,将在相关章节中作详细阐述。代码例子按章节学习需要,分别被安排放在如\Sample目录中NO1、NO2等子目录下,一些代码例子目录名称包含“Amend”是笔者对原有程序作了一些改进,因为原有程序可能有一些显示或实现上的问题。每一个代码都有“说明.PDF”文档,来说明此程序功能和运行结果。
在学习了SDK提供的一些例子后,到本书精通篇,笔者提供了一个完整的代码例子,此例子是笔者在长期的实践中,为众多大中型企业进行实际的系统集成时所研发的,现完整提供出来,您可直接使用或稍加改进就能直接运行,来解决您可能已思考很久或长期苦恼的问题。
先学习SDK提供的一些例子,再学习精通篇例子,循序渐进,心急可吃不得热豆腐。(e-works)