|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2015/8/4 19:19:28 |
标题: |
|
加入我的收藏 |
楼主: |
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报内存地址错误。 请大侠们指导一下。
----------------------------------------------
- |
作者: |
|
2015/8/5 8:57:33 |
1楼: |
1)可能的原因,bpl 依赖了 vcl 包,而 exe 没有依赖 2)先要释放 TForm5 实例
搞不懂,好多同学把 bpl 当 dll 来调用,这已经失去了运行时包的意义。 度一下: 重新编译 Vcl70.bpl
----------------------------------------------
-
|
作者: |
|
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 完毕!
----------------------------------------------
-
|
作者: |
|
2015/8/5 11:45:41 |
3楼: |
不喜欢带 BPL 文件运行。
其实 DLL 的缺点是比BPL 大,没有其他缺点。
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
|
2015/8/5 18:26:49 |
4楼: |
@wang_80919 (Flying Wang) 我BPL,DLL都不喜欢,有时找个东西,调试很多事。
就喜欢一个工程建工程目录。哪出问题一下就可以找到源码。
----------------------------------------------
-
|
作者: |
|
2015/8/6 13:12:53 |
5楼: |
foryour (sean) 有同感。特别是一些内存泄漏工具使用上,一个工程更好用。
----------------------------------------------
-
|
作者: |
|
2015/8/6 15:37:27 |
6楼: |
bpl是面向对象的而dll不是。bpl可以识别application但dll不能。bpl可以导出类、接口而dll不能。
----------------------------------------------
-
|
|