高手阿,可怜可怜我吧..... 运行期 Package 的建立,调用,和分发一直没解决阿 (在线等待...) (200分)

T

TMXYB

Unregistered / Unconfirmed
GUEST, unregistred user!
各位DFW,在回答问题前请看清题意。
我打算使用包的技术来将一个三层的客户端进行封装,但遗憾的是对包的技术我现在才开始涉及,现在我只是有个初步的概念。有几个问题要请教。
A。 包建立时的概念
问题:将所需的pas文件加到 包 中编译成运行期包中后生成的bpl文件是否在delphi/delphi 5/projects/bpl下;
B。 将 DataModule 封装成运行期包后
问题1:主窗口中如何调用DataModule 已经写的方法。比如调用进行服务器负载平衡的方法。
问题2:内有第三方控件是否影响后面的调用。
问题3:假如要动态调用包,是否还要包的注册(在哪注册?),可否有示例。
问题4:在其它的包中如何调用DataModule包,主要是类型的声明,可否有示例。
C。 分发(其实我已查看了台湾宝兰的一篇技术文章,但其变量声明的范围及类型仍不明白)
问题:在我的主程序中涉及到大量的第三方控件,将主程序的project/options/Package中的Build with run Package 打开后内涉及的所有包(很多三方控件包)是否都随主程序一起分发。
本问题涉及到的文章(来自台湾宝兰):
http://www2.borland.com.tw/tw/reference9.html
如果能有示例演示上述功能的再加200分,将不胜感谢。
Up也有分!
 
如果你是新开始开发,建议不要用运行时BPL
做起来十分麻烦,特别是用了第三方控件的时候
我发过这样的帖子,你可以看看。
小程序没有问题,我也做过
但对于大一些的系统就十分夸张了,我曾经想在我现在的项目上用这个技术(源代码65万行)
结果不得不放弃
 
我已经有一个现存的系统,要将它改用Package的技术,其实,DLL 的技术也可以,但好像难度更大。
 
没有问题的
 
就是最后一个问题都让你头大,所有第三方的BPL都得一起分发
这样的话,你的系统需要很多个BPL文件,文件一多,版本控制管理就变得很复杂
因为这些BPL都是相关的,一个版本升级,相当于大部分BPL要重新分发
不是跟你原来的目的冲突了吗?
 
如果采用DLL 技术,在DLL中调用主窗口中的DataModule中的对象,是不是回很复杂,特别是在客户端,这样如何能在DLL中实现负载平衡呢?
我还是觉得包的技术要好一些,(只有DataModule的包进行静态加载,其它涉及到三方控件的窗口封装的 包 进行动态加载。)
 
我也做过这样的项目,
总之很难做了,少用运行期包吧。
 
呵呵。分分都给我吧.
我打算使用包的技术来将一个三层的客户端进行封装,但遗憾的是对包的技术我现在才开始涉及,现在我只是有个初步的概念。有几个问题要请教。
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
//**************************************************************************
 
王寒松果然是超级大富翁,几句话似蜻蜓点水,但又画龙点睛,只可惜我功底太浅,有些仍未领悟,但这个难关必须突破,只好待具体问题时再发问,谢过王大侠了。
 
顶部