如何在程序中调用BPL包(100)

  • 主题发起人 主题发起人 Sdelphi_fu
  • 开始时间 开始时间
S

Sdelphi_fu

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,我有一个程序在D5中可以调用BPL包但是在D7中就出错了,我把整个程序在D7中重写的一遍还是不行,不知是什么原因,请哪位大侠帮个忙,分不鸲另加:调包程序:TcreateNewObject = function(Dataid:string) :Tobject;--定义调包方式procedure TForm1.loadpkbyname(pkname:string);var pkobject:THandle; CreateNewObject:TCreateNewObject; begin pkname:='PKlib/'+pkname; pkobject:=Loadpackage(pkname); @CreateNewObject:=GetprocAddress(pkobject,'CreateObject'); if integer(@CreateNewObject)<0 then Application.MessageBox('包加载失败!','Load Package',48) else CreateNewObject(DataID);--在这里载包时出错end;包程序是(编成BPL文件): function CreateObject :TObject; stdcall; exports CreateObject; function DestroyObject :Boolean; stdcall; exports DestroyObject;function CreateObject :TObject;begin Testfrm:=TTestfrm.Create(Application); //---也就是从这里调包程序的入口调包 Result:=TObject(Testfrm);end;function DestroyObject :Boolean;begin try Testfrm.Free; Result:=True; except Result:=False; end;end;
 
BPL是用D7编译的吗?
 
是的,全部用D7重编过.
 
楼上的兄弟,D7bpl包根本不用显示调用的它自己会找的,在编译的是如果选择带包编译的话,或者不想把这个包编译进去的话可以在主程序文件目录下,放置这个包它自己会找,根本不用像调Res那样。delphi都2010拉,还在用delphi5,不容易啊
 
to Notouch 兄: 见笑了,包程序是生成BPL,只是调包的程序在调用BPL的时候不能调用出错,不知道是什么原因,所以请指点一下,多谢!
 
出什么错?EXE有没有带包编译?
 
to xianjun: 你好,主程序生成EXE,没有带包编译,包是独立生成的BPL包,但是在EXE调用BPL时出错(调试时):project EXE raised exception class Exception with message'Application is not licensed to use this feature',process stopped.Use Step or run to continue.把包的文件加上调试时,就出错: Testfrm:=TTestfrm.Create(Application); //---出错信息是:Exception Excetion is module rtl70.bpl at 0001830F.
 
看出错信息应该是你的Delphi版本不支持这功能。装个企业版试试。
 
你好,我装的就是企业版,可是不知为什么会出这个错.
 
to xianjun:你好.我装的是:Borland Delphi Enterprise version 70 (Build 4.453)不知有没有补丁打,现在我真不知怎么调试,程序中没有用到第三方控件.
 
重新下载个版本来试试吧把机器上的先卸载干净。这外错误基本可以肯定是Delphi的版本问题。
 
我在两台机上都试过都不行了(不过D5下是可以调用的),你是说D7以上的版本吗,最新的D2010版,我没有下到,找了很久.(听说动不动就要1G多的安装包,还没有解压)
 
D7也可以的,只是说你的安装程序应该有问题,最好下载一个光盘版,然后自己打补丁。当然下载个Delphi 2007也可以。 直接用Delphi 2010估计用不了。
 
我装的这个D7是光盘版,但好象没有打上补丁,你有没有D7的补丁,发一个给可以吗?Email:Martin_fu666@163.com,多谢!
 
花了很久时间才下了一个D2009 和 一个D7+update1 Borland Delphi Enterprise version 70 (Build 8.1)
 
Testfrm:=TTestfrm.Create(Application); //---出错这是因为TTestfrm类在包里,应该用:BPLClass := GetClass('TTestfrm');来执行
 
装了个干净的:Borland Delphi Enterprise version 70 (Build 8.1)还是一样的出错,TO bbscom: 你好,其实我在主程序就执行了呀,如下调包程序:procedure TForm1.loadpkbyname(pkname:string);var pkobject:THandle; CreateNewObject:TCreateNewObject; begin pkname:='PKlib/'+pkname; pkobject:=Loadpackage(pkname); @CreateNewObject:=GetprocAddress(pkobject,'CreateObject'); if integer(@CreateNewObject)<0 then Application.MessageBox('包加载失败!','Load Package',48) else CreateNewObject(DataID); end; 请问你的:BPLClass := GetClass('TTestfrm');是在哪里执行的呀? 能具体一些吗?
 
确定包写的没有问题?在bpl中哪里来Application啊
 
function CreateObject :TObject; stdcall;CreateNewObject(DataID);--在这里载包时出错上面的声明和调用一样么哥们?
 
to Notouch: 你好,这种方式在D5中是可认调用的,但是在D7中就出错了,如果不是application,那你说应该是怎么处理呢?to googledcjt: 你好,你认为应该如何调用呢?
 
后退
顶部