李维关于动态调用Package中,只有调用组件的例子,怎么看不到调用BPL中函数的例子?(50分)

  • 主题发起人 主题发起人 快乐
  • 开始时间 开始时间

快乐

Unregistered / Unconfirmed
GUEST, unregistred user!
李维关于动态调用Package中,只有调用组件的例子中只有调用窗体和窗体中的组件或是方法
有没有向Dll那样单独把BPL作为存放函数?
 
没有人回答?
 
[:(!][:(!][:(!][:(!][:(!][:(!][:(!][:(!][:(!][:(!][:(!][:(!][:(!][:(!]
 
跟一般的 DLL 差不多的:
比如
1,包中包含的单元:
unit testu;
interface
function test;
exports
test; //输出该过程
implementation
function test;
var
i: Integer;
begin
i := 100;
end;
end.
2,包的源文件(编译生成 pkgtest.bpl):
package pkgtest;
{$R *.RES}
...//省略一些编译指令
{$IMPLICITBUILD OFF}
contains
testu in 'testu.pas';
end.
3,调用 pkgtest 中的 test 过程:
type
Ttest = procedure;
procedure TForm1.Button1Click(Sender: TObject);
var
HPackage: THandle;
test: Ttest;
begin
HPackage := LoadPackage('pkgtest.bpl');
if (HPackage <> 0) then
try
@test := GetProcAddress(HPackage, 'test');
if (@test <> nil) then
test
else
RaiseLastWin32Error;
finally
UnLoadPackage(HPackage);
end
else
RaiseLastWin32Error;
end;
 
如果是运行期包的话,只要use包中的单元就可以直接使用里面的任意函数,
就象在同一个程序里一样。
包不能输出函数,只能注册类,通过类来输出方法。
实质上,我的理解,包本身就是BORLAND用来解决类的问题的,而不是用来替
代DLL的。
纯粹放函数的包你可以用运行期包,不过运行期包是不需要动态调用的,准
确的说,是DELPHI已经帮你把调用做完了,你只需要USE,然后正常使用函数
或过程就好了。
 
to 京工之鸟:
完全同意你的观点,我现在要实同动态调用bpl,用类注册的方法完全可以实现对另一窗体的调用,
而我在试mdi时就出现很大的麻烦了,试了多种方法都不能创建,可以给点建议吗?如果用输出
prc的方法,我试了也不行。
 
没听懂你说什么???
“要实同动态调用bpl”是什么意思???
:(
 
哦打错了一个字是要实现动态调用bpl;
就是象dll一个的输出procedure 和function.
但bpl好象不同,我按上面bbkxjy的方法试了无数次,结果是那个@test为nil;
 
你是要动态调用BPL,然后再调用里面的某一个函数或过程是吗?
BPL应该不可以用来这样输出函数或过程的。或者你试一下在dpk
文件里写exports,在UNIT里写是肯定不行的。
 
我试过了,验证了我的理解。BPL不可以用作DLL来输出函数的。
只能输出类,如果你一定要这样调用的话,可以在BPL里面定义
一个类,通过输出他的方法来实现。
 
to 京工之鸟:
我试了没问题的啊,能不能贴你的代码上来?要不我发我试验的程序给你?
你可以用 QuickView 或 TDump 之类查看你的 bpl 的导出表,看是否已正确 export 了
test 过程。
 
把你的程序发给我看看?bitbird@126.com

 
我是这样的,不行啊
bpl中:
procedure mmtest;stdcall;
exports
ShowMDIChildForm,
mmtest;
var
UIPackageForm: TUIPackageForm;

implementation

{$R *.DFM}

procedure mmtest;stdcall;
begin
showmessage('ok');
end;

调用:
var
mmtest:procedure;stdcall;
begin
UIConnect := LoadPackage('包名');
mmtest := Getprocaddress(UIConnect,'mmtest');
if (@mmtest<>nil) then
mmtest;
@mmtest总是nil;
请指教。
 
to bbkxjy:可以给我看看你的源程序吗?
或是贴出来。maming_hn@163.com
 
哪位老大做过COM服务器。请指教!!!!!!!!!!分数好商量!!!!!
我想做多层结构的数据库系统。。。。。。

我不知道怎么写COM服务器,我能不能写出来像在BCB里封装的控件那样呀!!!
有没有例子可以让小弟看看!!!
分数可以商量!·!!!
 
bbkxjy, 的例子是对的!
 
后退
顶部