呵呵。分分都给我吧.
我打算使用包的技术来将一个三层的客户端进行封装,但遗憾的是对包的技术我现在才开始涉及,现在我只是有个初步的概念。有几个问题要请教。
A。 包建立时的概念
问题:将所需的pas文件加到 包 中编译成运行期包中后生成的bpl文件是否在delphi/delphi 5/projects/bpl下;
//******************************************************************
包的输出目录可以在dpk的Options选项里指定 Output directory
//******************************************************************
B。 将 DataModule 封装成运行期包后
问题1:主窗口中如何调用DataModule 已经写的方法。比如调用进行服务器负载平衡的方法。
//******************************************************************
DataModule包的加载
http://www2.borland.com.tw/tw/reference9.html 里已经有详细的代码
要注意的几个问题:
1.datamodule 里一定别忘了 RegisterClass( 'DataModule1');
datamodule1是你的DATAMODULE 的 实例名
2.Datamodule包一定要编译为runtime包.否则当你用 GetClass后返回的
TpersistentClass为NIL, 这样就无法访问包中的其他组件了.
//******************************************************************
问题2:内有第三方控件是否影响后面的调用。
//**************************************************************************
原则上说是不影响的. "内有的" 是什么意思?
//**************************************************************************
问题3:假如要动态调用包,是否还要包的注册(在哪注册?),可否有示例。
//**************************************************************************
动态调用包时,只要你的包是经过上面的 RegisterClass的,就不需要注册包
Example Code :
Unit1 In Package1.dpk
Unit Unit1;
interface uses..............
type
form1=class(tform)
Initialization
RegisterClass('form1');
finalization
unregisterClass('form1');
end.
注意上面的Initialization 是在你调用Loadpackage时自动运行的.
如果包中有多个unit,那么每个unit中的initialization 都会顺序执行自注册
注意上面的 finalization 也是自动完成类卸载的.
//**************************************************************************
问题4:在其它的包中如何调用DataModule包,主要是类型的声明,可否有示例。
//**************************************************************************
其他的包中调用 Datamodule包 ,同主模块调用是相同的方法.都是调用loadpackage
//**************************************************************************
C。 分发(其实我已查看了台湾宝兰的一篇技术文章,但其变量声明的范围及类型仍不明白)
//**************************************************************************
分发. 将主程序用到的包和 这些包需要调用的包都要发布,
要注意"分发出去的包"的安装路径。 不要放到主程序找不到的地方.
//**************************************************************************
问题:在我的主程序中涉及到大量的第三方控件,将主程序的project/options/Package中的Build with run Package
打开后内涉及的所有包(很多三方控件包)是否都随主程序一起分发。
//**************************************************************************
如果你的主程序也是 Build With Runtime Package 编译的话,
在 编译选项的Packages 页里 可以不选择那些第三方控件包, 也就是说
这些第三方控件包要随程序一起发布, 在Packages页的编辑框中列出的包
都是要编译进主程序里的.
要记住的要点: 主程序编译选项Packages页中,原则上可以不要所有的包
(意味着你的程序所有的类都由包中加载进来)
但是实际使用中, 至少应该保留 vcl50.bpl(d5)
如果是 D6 ,就是保留 vcl60.bpl
//**************************************************************************