dll和bpl的静态加载方式不一样?

naocha2 2009-09-17 01:38:56
我写了个dll.不用loadlibrary加载.在pas源码里写成
exrenal 'xx.dll'
当我把这个.dll删除了.运行时.提示找不到此dll.(以后可以更新这个dll达到更新功能的目的)

但是bpl的静态加载方式.我删除了这个.bpl.程序一样运行!!!
那这样又有什么作用呢.(我还是想更新bpl达到更新程序的目的)

好像只有options里有个build with runtime package项目.但是我如果打上勾.所有的bpl都用共享方式连接.问题是我想像dll一样.其它的编译进Exe.只有我写的bpl共享.不知道能不能这样.
难道.我非得用loadlibrary的方式动态加载bpl?

我刚用Delphi.可能是理解错了.但实在又找不到资料.对于Bpl.网上好像没有系统的资料可参考.
如果编译进exe.那单独写成bpl没什么用.但目前网上的资料都是用的loadpageck.
我想像vc里那样.(vc里发布个头文件.就可以用dll里的类了.以后更新dll就行了.)

PS:不知道我是否说清楚了没有.简洁点的话就是:我只想我写的bpl不编译进exe.其它的还是不变.一样的编译进去.而以后我就可以更新我的bpl来升则程序了.
...全文
175 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
董董 2009-09-19
  • 打赏
  • 举报
回复
选择'build with runtime package',并在列表中增加dcp文件,然后在程序单元文件中uses包的单元文件名,这种方式叫做静态绑定,程序运行时要求在搜索路径中能够找到bpl文件。静态绑定,适合公共函数或全局变量的共享使用。只要函数接口不变,主程序就不用重新编译,bpl文件可以单独更新和替换。

还有一种静态绑定,就是主程序项目文件中不选择'build with runtime package',那就需要包文件的dcu文件,但运行时也不再需要BPL文件的支持,因为BPL中的代码已经集成进exe文件中了。用delphi缺省做出来的程序就是这种方式,一个exe就可以了。

动态绑定的话,不需要做上面的操作,但需要使用loadlibrary在运行时加载BPL文件。同时,BPL文件中所定义的类,必须在被加载时自动注册类信息。比如你的BPL中定义了一个窗口类,在BPL单元文件中这样:
initialization
RegisterClass(TMyForm);

finalization
UnRegisterClass(TMyForm);

然后,在主程序代码中:
1、loadlibrary(FullPathBPLfileName);
2、定义一个可持久化类类型:AClass: TPersistentClass; //这里就在暗示,你的TMyForm必须申明为一个TPersistent类的子类,否则不支持RTTI,也就无法动态创建类对象。
3、AClass := GetClass(‘TMyForm’);
4、创建TMyForm:aForm := TCustomForm(AClass.Create).Create(Application);
5、aForm.show;
Harryfin 2009-09-19
  • 打赏
  • 举报
回复
包的引用是具有传递性的,你的package1引用了rtl这个包,自然就要带上rtl140.bpl这个包(注:不同版本的DELPHI,rtl后面的那个数值会不同)
naocha2 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 smallhand 的回复:]
也就是说,你可以编辑build with runtime package列表。需要更新的就添加上去就可以了。
[/Quote]
不行啊。那个框里我只添加了我的package1.但放到别的机子上还是提示找不到rtl140.bpl
exe大小没有还原。
火龙岛主 2009-09-17
  • 打赏
  • 举报
回复
也就是说,你可以编辑build with runtime package列表。需要更新的就添加上去就可以了。
coolspac 2009-09-17
  • 打赏
  • 举报
回复
build with runtime package 上面好像是可以选择哪个包的
火龙岛主 2009-09-17
  • 打赏
  • 举报
回复
把你想共享的放到列表中去,其他的可以就不要放了。

那么更新的时候,只更新共享的就可以了。

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧