求救,关于DELPHI里的问题(100分)

  • 主题发起人 主题发起人 hn_chx
  • 开始时间 开始时间
H

hn_chx

Unregistered / Unconfirmed
GUEST, unregistred user!
在function_emodem单元里定义了一个pub_mode全局变量,之后第一次执行

function TForm_function.rcu_connect(c_mode, port:integer
phone, gprsip:string
gprsport:integer
rcubh:string
delay:integer):integer;
begin
pubcmode:=2;
result:=rcu_emodem_connect(port,phone,delay);//EMODEM连接
end;
之后在
procedure TForm_function.Tmodem_connectok_decode(KMT:BYTE);
begin
if pubcmode=2 then
begin;
GResult.Excute_result:=RCU_CONNECT_OK;
end;
end;
中pubcmode不是2而是1090519042

重复上面2个函数第2次就没问题了,请问为何这样
 
跟踪一下,Tmodem_connectok_decode运行在 TForm_function.rcu_connec前
可以这样在两个函数里面加一个showmessage,
pub_mode定义之后,对他付个0看看;
 
最好加个延迟

result:=rcu_emodem_connect(port,phone,delay);//EMODEM连接
while gettickcount - oldtime < 3000 do
sleep(100);
pubcmode:=2;
 
谢谢Siva和sunslove。
本人已解决这个问题,该问题原来是由接收时钟过程
procedure TForm_function.timer_emodem_receiveTimer(Sender: TObject);
var
{tempstr,}recstr:string;
i,tempint{,resultint}:integer;
//hour,min,sec,msec:word;
begin
timer_emodem_receive.enabled:=false;
tempint:=sio_iqueue(pubcomport);
if tempint>0 then
begin
recstr:='';
setlength(recstr,tempint);
tempint:=sio_read(pubcomport,pchar(recstr),tempint);
for i:=1 to tempint do
begin
Ecom_rece.Rbuffer[Ecom_rece.start_pointer]:=recstr;
inc(Ecom_rece.start_pointer);
if Ecom_rece.start_pointer>ECOM_RECE_BUFF_MAX then
Ecom_rece.start_pointer:=1;
end;
end;
timer_emodem_receive.enabled:=true

end;
中 Ecom_rece.Rbuffer[Ecom_rece.start_pointer]:=recstr;引起的
其原因是Ecom_rece.Rbuffer数组的下标是从开始的而Ecom_rece.start_pointer的初始化值为0,所以引起下标越界导致pubcmode错误.

再次感谢Siva和sunslove。


 
谢谢Siva和sunslove。
本人已解决这个问题,该问题原来是由接收时钟过程
procedure TForm_function.timer_emodem_receiveTimer(Sender: TObject);
var
{tempstr,}recstr:string;
i,tempint{,resultint}:integer;
//hour,min,sec,msec:word;
begin
timer_emodem_receive.enabled:=false;
tempint:=sio_iqueue(pubcomport);
if tempint>0 then
begin
recstr:='';
setlength(recstr,tempint);
tempint:=sio_read(pubcomport,pchar(recstr),tempint);
for i:=1 to tempint do
begin
Ecom_rece.Rbuffer[Ecom_rece.start_pointer]:=recstr;
inc(Ecom_rece.start_pointer);
if Ecom_rece.start_pointer>ECOM_RECE_BUFF_MAX then
Ecom_rece.start_pointer:=1;
end;
end;
timer_emodem_receive.enabled:=true

end;
中 Ecom_rece.Rbuffer[Ecom_rece.start_pointer]:=recstr;引起的
其原因是Ecom_rece.Rbuffer数组的下标是从开始的而Ecom_rece.start_pointer的初始化值为0,所以引起下标越界导致pubcmode错误.

再次感谢Siva和sunslove。
 
后退
顶部