我在向自己编写的Dll中传在一个DataSet在动态调用时缺包错 下面是带码procedure ShowMe(Ahand:Thandle;ADataSet:DataSet);
var
Aform: Tform1;
begin
application.handle:=Ahand;
AForm:= TForm1.create(Application);
try
AForm.datasource.dataset:=ADataset;
AForm.showmodule;
finally
Aform.free;
end;
end;
请问是那里的错??
var
Aform: Tform1;
begin
application.handle:=Ahand;
AForm:= TForm1.create(Application);
try
AForm.datasource.dataset:=ADataset;
AForm.showmodule;
finally
Aform.free;
end;
end;
请问是那里的错??
解决方案 »
- 如何获得“C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files\Content.IE5”
- COLLATE Chinese_PRC_CI_AS NULL
- 关于Access数据库插入
- 程序优化问题
- 欢迎讨论数组越界问题
- 什么打印控件可以在运行时允许用户调整打印的位置?
- 望高手指点! 存入图片到sql2008,编译通过,执行没效果?
- Delphi与Flash联合
- 谁有股票的控件....
- 请问如何设置BUTTON按钮上的COLOR属性,我是个初学者,请高手明示,谢谢!!!!!
- (初学问题)DbGrid中什么属性可以控制列中的值过长可自动换行?
- 两个小问题 100分,先谢谢个位
你可以参考一下
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure pro_click(sender:TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
jk_handle:Thandle;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
begin
pro_click(self);
end;procedure TForm1.pro_click(Sender: TObject);
var
ls_menu:string;
jk:procedure (cs_gzbh,cs_xm,cs_bmfs:string);stdcall;
// 传递参数:工作编号,姓名,编码方式
begin jk_handle:=loadlibrary(pchar('new'));
if jk_handle<=0 then // 不存在DLL
begin
Application.messagebox('动态链接库加载失败!','提示',64);
exit;
end
else // 存在DLL
begin
try
@jk:=GetprocAddress(jk_handle,'jk_cscd');
jk('1','2','3');
except
Application.messagebox('动态链接库加载失败!','提示',64);
exit;
end; // end of except
end;
end;end.//////////////////////////////////////////////调用的new.dll的代码:
library new;uses
Forms,
Unit1 in 'Unit1.pas' {Form1};{$R *.RES}
exports
jk_cscd;//传入gzbh,接口过程begin
{Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;}
end.
_______________________________________unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Label1: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
procedure jk_create;// 建立表单
procedure jk_free; // 释放表单
procedure jk_cscd(cs_gzbh:string;cs_xm:string;cs_bmfs:string);stdcall;implementation{$R *.DFM}
procedure jk_create;//建立表单
begin
Application.CreateForm(Tform1, form1);
end;procedure jk_free;//释放表单
begin
if assigned(form1) then form1.Free;
end;procedure jk_cscd(cs_gzbh,cs_xm,cs_bmfs:string);stdcall;
begin
try
jk_create;
form1.Label1.Caption:=cs_gzbh+','+cs_xm+','+cs_bmfs;
form1.ShowModal;
finally
jk_free;
end;
end;
end.
你可以把DataSet输出成XML,然后以String形式把它传递,最后在接受方合成DataSet
你可以把DataSet输出成XML,然后以String形式把它传递,最后在接受方合成DataSet不会,请弄个例子吧 谢谢了
请看 之是dll内的代码
Function ShowMe(Ahand:Thandle):String;
Var
AForm: Tform2;
Begin
Application.Handle:=Ahand;
Aform:=Tform2.Create(application);
Try
AForm.ShowModal;
Result:=form2.PStr;
Finally
AForm.Free;
end;
end;这是调用的代码
procedure TForm1.Button1Click(Sender: TObject);
Var
Ahand: Thandle;
AFun: Function(Ahand:Thandle):string;
begin
Ahand:= loadlibrary(pchar('F:\HST\temp\Temp\Find.dll'));
If Ahand<=0 then
showmessage('erro1')
else begin
@Afun:=GetProcAddress(Ahand,pchar('ShowMe'));
If not(@AFun=nil) then
Showmessage(Afun(Handle))
else
showmessage('error2');
Freelibrary(Ahand);
end;
end;包错
真的不行吗