DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: wjy13061029975
今日帖子: 1
在线用户: 4
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 foryour (sean) ★☆☆☆☆ -
普通会员
2015/8/4 19:19:28
标题:
有关bpl的两个小问题!!! 浏览:1824
加入我的收藏
楼主: bpl代码:
----------
procedure showform5(App: TApplication); stdcall;
exports showform5;

implementation

{$R *.dfm}

procedure showform5(App: TApplication);
begin
  Application:= App;
  Form5:= TForm5.Create(App);
  Form5.Show;
end;

initialization
RegisterClass(TForm5);
finalization
UnRegisterClass(TForm5);

end.

exe代码
----------
type
Tshowform5 = procedure(App: TApplication); stdcall;

const
  bplFile = 'Package1.bpl';
  
  
加载bpl
if FileExists(bplFile) then
    bplH := LoadPackage(bplFile);
  
执行bpl方法
var
  pProc: Tshowmdiform;
pProc := getprocaddress(bplH, 'showform5');
pProc(application);  

查找bpl类
if FindClass('TForm5') = nil then  //找不到TForm5类
    ShowMessage('no find')
  else
    ShowMessage('find');
  
卸载bpl
  if bplH <> 0 then
  begin
    UnRegisterModuleClasses(bplH);
    UnloadPackage(bplH);  //报地址错误
    bplH:= 0;
  end;
----------
两个小问题:
1.FindClass/GetClass 找不到 TForm5这个类。
2.UnloadPackage 退出exe报内存地址错误。
请大侠们指导一下。
----------------------------------------------
-
作者:
男 mr_liyouliang (阿亮) ★☆☆☆☆ -
普通会员
2015/8/5 8:57:33
1楼: 1)可能的原因,bpl 依赖了 vcl 包,而 exe 没有依赖
2)先要释放 TForm5 实例

搞不懂,好多同学把 bpl 当 dll 来调用,这已经失去了运行时包的意义。
度一下: 重新编译 Vcl70.bpl
----------------------------------------------
-
作者:
男 foryour (sean) ★☆☆☆☆ -
普通会员
2015/8/5 11:22:22
2楼: 这个问题昨晚自行解决了,方法如下:
环境XE8 up1 + win7
exe方面:
1.选中exe工程,右击选择Options
2.弹出Options对话框,选中 Packages---Runtime Packages 
3.勾选 Link with runtime packages 为True
4.Runtime packages 只填写package1
5.发布的时候带上 rtl220.bpl,vcl220.bpl
bpl方面
1.选中bpl工程,右击选择Options
2.弹出Options对话框,选中 Description
3.勾选 Runtime only
完毕!
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2015/8/5 11:45:41
3楼: 不喜欢带 BPL 文件运行。

其实 DLL 的缺点是比BPL 大,没有其他缺点。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 foryour (sean) ★☆☆☆☆ -
普通会员
2015/8/5 18:26:49
4楼: @wang_80919 (Flying Wang)
我BPL,DLL都不喜欢,有时找个东西,调试很多事。

就喜欢一个工程建工程目录。哪出问题一下就可以找到源码。
----------------------------------------------
-
作者:
男 jim8363506 (youzx) ★☆☆☆☆ -
普通会员
2015/8/6 13:12:53
5楼: foryour (sean) 有同感。特别是一些内存泄漏工具使用上,一个工程更好用。
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2015/8/6 15:37:27
6楼: bpl是面向对象的而dll不是。bpl可以识别application但dll不能。bpl可以导出类、接口而dll不能。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行209.9609毫秒 RSS