大家好:
在Spcomm控件的数据接受事件里如下:
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
begin
end;
请问:一次接收的数据的长度————BufferLength 是多大????最长是8位对吗??
请高手指点。
在Spcomm控件的数据接受事件里如下:
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
begin
end;
请问:一次接收的数据的长度————BufferLength 是多大????最长是8位对吗??
请高手指点。
解决方案 »
- 请大家帮忙看一段程序.我想在richedit中选中某行,然后将其颜色改变的.有点问题.谢谢!
- Com难题,高手请进!
- TClientSocket使用Open()连不上服务器的问题,在线等待高手解决!
- 求高手指教,如何解决:rave处理大数据量的问题!
- 大家来帮我看看这个程序错再哪了(简单程序)?
- ????出了什么问题......
- 关于用Quick report 打印列表,备注字段关于用Quick report 打印列表,备注字段导致行高不统一,怎样动态的控制列竖线的Height呢,答者有
- Delphi 一段视频代码求解,
- 有没有谁对INDY这个控很熟啊!当连不上时怎么捕捉到异常啊?
- 数据库报表问题
- 在DBGrid中用了DBGrid1DrawColumnCell事件后成死循环了
- delphi中如何创建一个公用的函数库,供所有模块调用?急!!!
bufferLength就是對應每次接收到的數據長度, 不确定的, 每次接收到數據, 就觸發ReceiveData事件, 你可檢查 BufferLength的大小, 來确定當次接收到多少數據!
您好:
我的Spcomm控件的数据接受代码如下:procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
tmpArray:array[0..4096] of Byte;
i: DWORD;
tmpStr:string;
wchb:string;
pStr:PChar;
begin
if Check1.Checked then //if语句是按十六进制接受的代码;
begin
pStr:=Buffer;
tmpStr:=string(pStr);
Dec(PStr);
for i:=0 to Length(tmpStr)-2 do
begin
inc(PStr);
tmpArray[i]:=Byte(PSTR^);
wchb:=wchb+IntToHEX(ord(tmpArray[i]),2);
end;
memo2.Lines.Add(wchb);
exit;
end;
pStr:= Buffer; //这儿是按字符串接受的代码;
memo2.Lines.Add(pStr);
end;为什么在接受8位以内数据时能用,8位以上时就不能用呢?列如 :我让它按十六进制接受
‘00AA18AA00AAA0AA14AACAAA66’时,总是出错。错误提示是:“Access violation
at address 00403EDA in module "project1.exe",Read of address 00000054”。
请问这是什么意思啊?是不是接受代码有错啊???? 您帮俺看看好吗?
viewstring:string;
i:integer;
rbuf,sbuf:array[0..100] of byte;
begin
viewstring:='';move(buffer^,(pchar(@rbuf))^,bufferlength);
memo1.lines.add(inttostr(BufferLength));for i:=1 to bufferlength doviewstring:=viewstring+chr(rbuf[i])+' ';
//chr(rbuf[i])+'';
//inttohex(rbuf[i],2)+' ';viewstring:='接收'+viewstring;memo1.lines.add(viewstring);memo1.lines.add(' ');
我的Spcomm控件的数据接受代码如下:procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
tmpArray:array[0..4096] of Byte;
i: DWORD;
tmpStr:string;
wchb:string;
pStr:PChar;
begin
if Check1.Checked then //if语句是按十六进制接受的代码;
begin
pStr:=Buffer;
tmpStr:=string(pStr);
Dec(PStr);
for i:=0 to Length(tmpStr)-2 do
begin
inc(PStr);
tmpArray[i]:=Byte(PSTR^);
wchb:=wchb+IntToHEX(ord(tmpArray[i]),2);
end;
memo2.Lines.Add(wchb);
exit;
end;
end;为什么在接受8位以内数据时能用,8位以上时就不能用呢?列如 :我让它按十六进制接受
‘00AA18AA00AAA0AA14AACAAA66’时,总是出错。错误提示是:“Access violation
at address 00403EDA in module "project1.exe",Read of address 00000054”。
请问这是什么意思啊?是不是接受代码有错啊???? 您帮俺看看好吗?
i:integer;
wchb:string;
tmpArray:array[0..4096] of Byte;
begin
wchb:='';
if Check1.Checked then //if语句是按十六进制接受的代码;
begin
move(buffer^,pchar((@tmpArray)^),bufferlength);
for i:=0 to bufferlength-1 do
begin
wchb:=wchb+ inttohex(tmpArray[i],2);
end;
end;