下面是我写的一段向GPRS发送数据的程序.
//gprs_num,gprs_jzqh,gprs_cjqh:为全局变量
1:line_jzqh:=frmdata.Query_sscs_line.fieldbyname('jzq_bh').asinteger;
2:result:=sendata(line_ip_address,line_sendata);//发送数据的函数
3:main.Gprs_num:=line_ip_address;
4:main.Gprs_jzqh:=line_jzqh;
5:main.Gprs_cjqh:=line_have_port;
运行这段代码前后的line_jzqh不相同
前面的line_jzqh值是正常运行完发送数据后line_jzqh值变的非常大.请问这是什么原因.
还有就是当下一个循环时运行到3句时会出现内存泻漏.
下面是我发送数据的函数.
function tmain.sendata(phone_num,data:string):boolean;
var
userid:array[1..12] of char;
src:array[0..1023] of char;
len:cardinal;
buf:arr;
sult,i:integer;
s:string;
begin
try
for i:=1 to length(phone_num) do
userid[i]:=phone_num[i];
@function_do_send_user_data:=GetProcAddress(hand,'do_send_user_data'); //取发送函数地址
if (@function_do_send_user_data=nil) then
begin
addlog_string('取不到 do_send_user_data 地址');
result:=false;
exit;
end;
len:=length(data);
if len>0 then
begin
for i:=1 to len do
src[i]:=data[i];
//厂家提供的发送数据的函数
sult:=function_do_send_user_data(@userid[1],@src[1],len,@buf[1]);//发送数据
addsendata_log('向 '+phone_num+' 发送数据:'+strtohexstrdata,len));
if sult<0 then
begin
s:=buf;
addlog_string('向 '+phone_num+' 发送数据:失败');
result:=false;
exit;
end;
result:=true;
end
else
begin
addlog_string('数据不能为空');
result:=false;
exit;
end;
except
result:=false;
end;
end;
//gprs_num,gprs_jzqh,gprs_cjqh:为全局变量
1:line_jzqh:=frmdata.Query_sscs_line.fieldbyname('jzq_bh').asinteger;
2:result:=sendata(line_ip_address,line_sendata);//发送数据的函数
3:main.Gprs_num:=line_ip_address;
4:main.Gprs_jzqh:=line_jzqh;
5:main.Gprs_cjqh:=line_have_port;
运行这段代码前后的line_jzqh不相同
前面的line_jzqh值是正常运行完发送数据后line_jzqh值变的非常大.请问这是什么原因.
还有就是当下一个循环时运行到3句时会出现内存泻漏.
下面是我发送数据的函数.
function tmain.sendata(phone_num,data:string):boolean;
var
userid:array[1..12] of char;
src:array[0..1023] of char;
len:cardinal;
buf:arr;
sult,i:integer;
s:string;
begin
try
for i:=1 to length(phone_num) do
userid[i]:=phone_num[i];
@function_do_send_user_data:=GetProcAddress(hand,'do_send_user_data'); //取发送函数地址
if (@function_do_send_user_data=nil) then
begin
addlog_string('取不到 do_send_user_data 地址');
result:=false;
exit;
end;
len:=length(data);
if len>0 then
begin
for i:=1 to len do
src[i]:=data[i];
//厂家提供的发送数据的函数
sult:=function_do_send_user_data(@userid[1],@src[1],len,@buf[1]);//发送数据
addsendata_log('向 '+phone_num+' 发送数据:'+strtohexstrdata,len));
if sult<0 then
begin
s:=buf;
addlog_string('向 '+phone_num+' 发送数据:失败');
result:=false;
exit;
end;
result:=true;
end
else
begin
addlog_string('数据不能为空');
result:=false;
exit;
end;
except
result:=false;
end;
end;
可以使用sharemem进行内存管理,在uses的第一个加上sharemem,
up