厂家提供了一个DLL,我写了一个回调函数去得到返回的值,但是无法把回调函数的值返回到我的程序里的一个公用变量里,请问应该如何实现。
我是这样写的:
PUBLIC
v_sStr: string;procedure form.buttonOnclick(sender: TOBJECT)
var
procedure InsertDb(v_sPhone, v_sRecvaddi, v_sContext, v_sTime: string);
begin
在这里得到的一些值需要返回来,但是不知道怎么得到。
比如:
v_sStr := 值; 这样出错,v_sStr是全局变量。
end;
procedure GetInfo(mobile, senderaddi, recvaddi, ct,sd:PChar; flag:Pointer);stdcall;
begin
………………………………………………
………………………………………………
InsertDb(v_sPhone, v_sRecvaddi, v_sContext, v_sTime)
end;
begin
resultStatus := _ReceiveSMSEx(PChar(CST_sSN),@GetInfo);
end;
我是这样写的:
PUBLIC
v_sStr: string;procedure form.buttonOnclick(sender: TOBJECT)
var
procedure InsertDb(v_sPhone, v_sRecvaddi, v_sContext, v_sTime: string);
begin
在这里得到的一些值需要返回来,但是不知道怎么得到。
比如:
v_sStr := 值; 这样出错,v_sStr是全局变量。
end;
procedure GetInfo(mobile, senderaddi, recvaddi, ct,sd:PChar; flag:Pointer);stdcall;
begin
………………………………………………
………………………………………………
InsertDb(v_sPhone, v_sRecvaddi, v_sContext, v_sTime)
end;
begin
resultStatus := _ReceiveSMSEx(PChar(CST_sSN),@GetInfo);
end;
照这样改看行不行procedure InsertDb(v_sPhone, v_sRecvaddi, v_sContext, v_sTime: string);v_sStr: string;implementationprocedure InsertDb(v_sPhone, v_sRecvaddi, v_sContext, v_sTime: string);
begin
在这里得到的一些值需要返回来,但是不知道怎么得到。
比如:
v_sStr := 值; 这样出错,v_sStr是全局变量。
end;procedure GetInfo(mobile, senderaddi, recvaddi, ct,sd:PChar; flag:Pointer);stdcall;
begin
………………………………………………
………………………………………………
InsertDb(v_sPhone, v_sRecvaddi, v_sContext, v_sTime)
end;procedure form.buttonOnclick(sender: TOBJECT)
begin
resultStatus := _ReceiveSMSEx(PChar(CST_sSN),@GetInfo);
end;***********************************
高级群号:16497064欢迎编程高手加入.
***********************************
procedure GetInfo(mobile, senderaddi, recvaddi, ct,sd:PChar; flag:Pointer);stdcall;
也在放在接口节;
***********************************
高级群号:16497064欢迎编程高手加入.
***********************************
resultStatus := _ReceiveSMSEx(PChar(CST_sSN),@GetInfo);停在了这里,感觉好象是少了点什么。
function _ReceiveSMSEx(sn: PChar; func: Pointer): integer;stdcall; external 'EUCPComm.dll' name 'ReceiveSMSEx';
已经声明了。我在当前单元的上面加了
TYPE
THDProcedure = procedure(mobile, senderaddi, recvaddi, ct,sd:PChar; flag:Pointer); stdcall;可是还是有错,我已经开被这个东西搞晕了。
function _ReceiveSMSEx(sn: PChar; func: Pointer): integer;stdcall; external 'EUCPComm.dll' name 'ReceiveSMSEx'; //在别单元声明的。private
………………………………………………
v_sStr: string;
function GetSmsContext(AThread: TIdPeerThread): boolean;
procedure GetInfo(mobile, senderaddi, recvaddi, ct,sd:PChar; flag:Pointer);stdcall;
procedure InsertDb(v_sPhone, v_sRecvaddi, v_sContext, v_sTime: string);
……………………………………………………………………function TfrmMain.GetSmsContext(AThread: TIdPeerThread): boolean;
var
resultStatus: integer;
begin
resultStatus := _ReceiveSMSEx(PChar(CST_sSN),@GetInfo); //编译时出错, 提示信息“variable required。”
if resultStatus = 2 then
result := true
else
result := false;
end;
procedure TfrmMain.InsertDb(v_sPhone, v_sRecvaddi, v_sContext,
v_sTime: string);
begin
当然就是插入数据库了,
但是在这里插入后,我需要把几个值传出来。
v_sStr := 值;
end;procedure TfrmMain.GetInfo(mobile, senderaddi, recvaddi, ct, sd: PChar;
flag: Pointer);
var
v_sPhone, v_sRecvaddi, v_sContext, v_sTime
begin
……………………………………
InsertDb(v_sPhone, v_sRecvaddi, v_sContext, v_sTime);
end;调用:GetSmsContext(AThread)函数,传入一个线程进去。
v_sTime: string);
begin
当然就是插入数据库了,
但是在这里插入后,我需要把几个值传出来。
v_sStr := 值;
end;对啊,你直接赋值不就可以了?不要说你刚学delphi几个小时!