我把TTable作为参数,在主程序与dll的function之间传递,现报告Access Violation,然后在DBGrid中数据显示正常,然后当移动DBG

  • 主题发起人 主题发起人 goodshilei
  • 开始时间 开始时间
G

goodshilei

Unregistered / Unconfirmed
GUEST, unregistred user!
我把TTable作为参数,在主程序与dll的function之间传递,现报告Access Violation,然后在DBGrid中数据显示正常,然后当移动DBGrid的滚动条时就报告Invalid pointer operation,请问那位大仙能够给我诊断一下(100分)<br />我把TTable作为参数,在主程序与dll的function之间传递,function如下
function showgrid(table:ttable):boolean;
begin
Application.CreateForm(Tform1, form1);
form1.table1:=table;
form1.DataSource1.DataSet:=form1.Table1;
form1.DBGrid1.DataSource:=form1.DataSource1;
form1.table1.Active:=true;
form1.show;
end;
(当然这里显得有些罗嗦,只是为了说明问题。)
但当调用Dll显示Dll中的窗体后
就报告Access Violation,然后在DBGrid中数据显示正常,然后当移动DBGrid
的滚动条时就报告Invalid pointer operation,我已经在uses中加入了sharemem
请问那位大仙能够给我诊断一下
 
查询一下 "dll" 这个关键字吧,以前有讨论的。主要是主exe 的工程文件和被调用的Dll工程
文件都要首先引用 Sharemm 这个单元,因为有 string 类型的变量在两者之间传递。
 
1.把function定义为stdcall
2.最好别用application.createform,换成form1:=tform1.create(nil)之类的。
3.虽然不关你的出错的事,但很迷惑的是,你少了result:=false或true之类的
 是不是应定义为procedure?
 
這樣會行!
不要在dll中如此建Form最好將主調程序的枸本傳到dll中的form,讓兩真真
成為一個整體;交流才有進步;(請幫看我的有關dephi共享機制和ado延時現象好嗎)
例:

function showgrid(AHandle:Thandle; table:ttable):boolean; stdcall;


{var
Form1:Tform1;不要}
implementatoin

function showgrid(AHandle:Thandle; table:ttable):boolean;
var
Form1:Tform1;//方法內建;

begin
application.handle:=Ahandle;
Form1;=tFORM1.CREATE(Application);
try
form1.table1:=table;
form1.DataSource1.DataSet:=form1.Table1;
form1.DBGrid1.DataSource:=form1.DataSource1;
form1.table1.Active:=true;
form1.showmodal;
finally
form1.free;
end;
end;
 
后退
顶部