Package declarations and source files(包声明和源文件)
每个包用一个单独的源文件进行声明,它的扩展名是.dpk,以便和其它包含Object Pascal代码的文件混淆。包源文件不包括类型、数据、过程或函数声明。取而代之的是,它包含
? 包的名称;
? 它所需要的其它包的列表。这些包被链接到新包中;
? 包被编译时所包含的(或绑定的)单元文件列表。包实际上是这些代码单元的一个外包装,这些单
元为编译后的包提供功能。
包的声明有如下形式:
package packageName;
requiresClause;
containsClause;
end.
这里,packageName是任何有效标志符;requiresClause和containsClause都是可选的。比如,下面的代码声明了DATAX包。
package DATAX;
requires
baseclx,
visualclx;
contains Db, DBLocal, DBXpress, ... ;
end.
requires子句列出了声明的包所需要的其它外部包。它包括指示字requires,后面是逗号隔开的包名称,然后跟一个分号。若包不引用其它包,它不需要requires子句。
contains子句指明要被编译并绑定到包中的单元。它包括指示字contains,后面是逗号隔开的单元名列表,然后跟一个分号。单元名后面可以跟关键字in和源文件名,源文件名可以包括或不包括路径,并用单引号括起来,路径可以是绝对的,也可以是相对路径。比如,
contains MyUnit in 'C:\MyProject\MyUnit.pas';// Windows contains MyUnit in '\home\developer\MyProject\MyUnit.pas'; // Linux
注意:包单元中的线程局部变量(用threadvar声明)不能被使用包的客户访问。
Naming packages(命名包)
一个编译包包括几个生成文件。比如,包DATAX的源文件是DATAX.dpk,编译器从它生成一个可执行的二进制映像文件,它叫做
- 137 -
Libraries and packages
? 在Windows下: DATAX.bpl and DATAX.dcp ? 在Linux下: bplDATAX.so and DATAX.dcp.
DATAX用来在其它包的requires子句中指定这个包,或当程序使用这个包时用DATAX来指定。在一个工程中,包名必须是唯一的。
The requires clause(requires子句)
requires子句列出了当前包所使用的其它外部包,它的作用就像单元文件中的uses子句。当程序使用当前包,并且使用了requires子句中列出的外部包所包含的一个单元时,外部包被自动链接到程序。 若包中的单元文件引用了其它包中的单元,则其它包应该被包含在第一个包的requires子句中省略了其它包,编译器从.dcu(Windows)或
避免循环包引用
包在它们的requires子句中不能包含循环引用。它的意思是? 包在它的requires子句中不能引用自己;
? 引用链结束时不能引用链中的任何包。若包A需要包需要C,那么C不能需要A。
重复包引用
在包的requires子句中,编译器忽略重复的包引用,但为了设计及程序的可读性考虑,应当删除重复的包引用。
The contains clause(contains子句)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-103.html
我们也去美国巡航