用过Dbi的请进(100分)

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

spear

Unregistered / Unconfirmed
GUEST, unregistred user!
我在远程(Modem)BatchMove时想显示传过来多少记录或百分比。
我的程序如下:
function myfunc(ecbType : CBType; iClientData : LongInt;
pCbInfo : Pointer): CBRType; stdcall;
var
str: String;
j,pos1: integer;
begin
if (ecbType=cbGENPROGRESS) then
begin
j:=pCBPROGRESSDesc(pCbInfo).iPercentDone;
if (j<0) then //如果iPercentDone为-1,则分析szMsg的信息
begin
str:=pCBPROGRESSDesc(pCbInfo).szMsg;
pos1:=Pos(':',Pchar(str))+1; //提取出拷贝的记录数
Form1.Label1.Caption:=copy(str,pos1,100);
end
else
Form1.Label1.Caption:=IntToStr(j)+'%';
Form1.Label1.Update;
Result:=cbrCONTINUE; //必须返回cbrCONTINUE以便让BatchMove继续
//若返回cbrABORT则终止拷贝
end;
end;

procedure TForm1.StartClick(Sender: TObject);
var
cbinfo : pCBPROGRESSDesc;
RegResult: Integer;
begin
Session.Open;
Check(DbiRegisterCallBack(
nil, //Cursor (Optional)
cbGENPROGRESS, //Type of Callback
LongInt(0), //Pass-through client data
sizeof(CBPROGRESSDesc), //Callback buffer len
cbinfo, //Pointer to callback function
@myfunc //Call back fn being registered
));
BatchMove1.Execute;
RegResult:=DbiRegisterCallBack(nil,cbGENPROGRESS,0,
sizeof(CBPROGRESSDesc),nil,nil);
ShowMessage(IntToStr(RegResult));
end;

Debug时,程序至ShowMessage(IntToStr(RegResult))都无问题,可
要退出Button1的OnClick事件时却出现Access violation 30313681
这种错误,而且在不同机器上试验时出错信息一样(地址一样),各位
有何高招?
 
cbinfo需要给内存大小.
egin
Session.Open;
cbinfo:=allocmem(sizeof(CBPROGRESSDesc));
Check(DbiRegisterCallBack(
nil, //Cursor (Optional)
cbGENPROGRESS, //Type of Callback
LongInt(0), //Pass-through client data
sizeof(CBPROGRESSDesc), //Callback buffer len
cbinfo, //Pointer to callback function
@myfunc //Call back fn being registered
));
BatchMove1.Execute;
RegResult:=DbiRegisterCallBack(nil,cbGENPROGRESS,0,
sizeof(CBPROGRESSDesc),nil,nil);
ShowMessage(IntToStr(RegResult));
freemem(cbinfo);
end;
 
如此简单的问题还要麻烦你,实在汗颜,不过主要责任
还在Help,因我是拷贝过来的
 
后退
顶部