以下代码是一种接收数据处理方式,我都试用了好几种处理方法,都会出现这种问题,郁闷啊!
我跟踪调试了好几次,好象是在赋值的时候出错的!
Var redate: Array of variant;
i:integer;
s1:String;
Begin
redate:=FCom.Input;
if redate=nil then Exit;
s1:='';
for i:=0 to VarArrayHighBound(redate,1) do
s1:=s1+inttohex(redate[i],2);
......
我跟踪调试了好几次,好象是在赋值的时候出错的!
Var redate: Array of variant;
i:integer;
s1:String;
Begin
redate:=FCom.Input;
if redate=nil then Exit;
s1:='';
for i:=0 to VarArrayHighBound(redate,1) do
s1:=s1+inttohex(redate[i],2);
......
解决方案 »
- 用delphi实现判断当前窗体活动窗体是不是QQ登录窗体怎么写?
- 很简单的问题, 为什么下面会出现异常,
- 有关ReadProcessMemory的问题?
- 2004人生年度总结 问题的提出
- 如何在文本中任意地方插入一行空行?
- tree 中如何知道一个节点是否有子节点
- 想问一下SQL Enterprise Manager中的那种象网页一样的界面是怎么实现的?
- SOS求助,急!请多多赐教,谢谢!
- 在哪里有installshield下载? 安装完了installshield后,执行文件叫什么名字?
- 用IDFTP连接FTP,怎么样获得某个文件夹下的所有文件名
- 求教:c语言的结构类型改成delphi记录类型
- delphi2005没有帮助文件怎么办?
比方dbgrid(或者一个数组)只有3列,但是你却给它的第四列赋值,
dbgrid.fields[3]:='xxx';
这样就容易出现这种错误。用数组来举例:
假设一个数组只定义了3个元素,你却给第四个元素赋值,也会出现这类错误
但就是不知道那里错误的
我是用VarArrayHighBound(redate,1) 做为最大长度,应该是自动得到最大列的
下面是我的另外1种写法,循环采集用7,8次后出现同样错误:
var aa: array of byte;
ii, jj: Word;
vTmp1: variant;
ovTmp1: olevariant;
s1: String;
begin
Sleep(200);
jj := FCom.InBufferCount;
SetLength(aa,jj+1); ovTmp1 := FCom.Input;
vtmp1 := VarArrayCreate([0,jj],varByte);
vtmp1 := ovTmp1; for ii := 0 to jj - 1 do
aa[ii] := vtmp1[ii];
S1 := '';
for ii := 0 to jj - 1 do
S1 := S1 + IntToHex(aa[ii],2) ; //+ ' '; //Gget_Data 保存数据信息
GRecStr:=GRecStr+S1; //保存接收字符
GRecStr:=DelSpaceStr(GRecStr);//截取字符串中的空格
越界了??从你第一个代码,感觉似乎不是越界,而是 inttohex 可能会出错
FCom := TMSComm.Create(nil);
FCom.CommPort := iCom; //com1,com2,com3
FCom.RThreshold := 0; //接收缓冲区收到每一个字符不产生 OnComm 事件
FCom.InputMode := comInputModeBinary;
FCom.InBufferSize :=2048;
FCom.Settings := '2400,m,8,1';
我屏蔽 inttohex 下边语句再测试下,谢谢你们!
这句,似乎应该也检查,
最好在调试的时候,
在这句后,检查
VarArrayHighBound(redate,1)
的值
if VarArrayHighBound(redate,1)<10 then Exit;
try
redate:=FCom.Input;//??
except
showmsg('出错了!',myerror);
end;
系统会弹出设定的错误信息,各位朋友是否上面??处赋值有问题
Var redate: Array of variant;
cqii:integer;
cqs1:String;
Begin
cqs1:='';
sleep(100);
//redate:=nil;
//if FCom.InBufferCount<10 then Exit;
try
redate:=FCom.Input;
except
showmsg('出错了!',myerror);
end;
运行了7,8次还是报了同样的错误!!
各位朋友帮我看看怎么回事情的
是不是硬件程序通信出错,引起这样的问题
redate: Array of variant;
改为:
Var
redate: variant;