问:串口通信中variant和olevariant的问题

vanqi 2004-06-23 09:46:49
控件:MSComm

发送程序是这样子的:
var
i,j: Integer;
S_Buffer: array[1..5]of byte;
SxBuffer: OleVariant;
begin
j:=0;

S_Buffer[1]:=$D7;//$D7是数据信息报的标志位

S_Buffer[2]:=$01;

S_Buffer[3]:=$15;
for i:=1 to 3 do
j:=j+S_Buffer[i];

S_Buffer[4]:=-(j mod 256);

SxBuffer:=VarArrayCreate([0,3],VarByte);
for i:=1 to 4 do
SxBuffer[i-1]:=S_Buffer[i] ;

MSComm1.Output:=SxBuffer;
MSComm1.OutBufferCount:=0;
end;

能接收到串口信号
但是在接受程序中老是出现错误 :invalid argument

接收程序是如下:
var
R_Buffer : array[1..2100]of Byte;
RxBuffer : OleVariant;
begin
Case MSComm1.CommEvent of
ComEvReceive:
Begin
MSComm1.InputLen:=1;
repeat
RxBuffer :=MSComm1.Input;
R_Buffer[1] :=RxBuffer[0]; //错误出现的地方!!
//错误invalid argument
until
R_Buffer[1] =$D7;//取得标志位$D7 并从缓冲区中去除该字符
//处理其他字符信息。。。。。

我又试了几回:(但都不行)
1 在repeat语句之前加上 RxBuffer:=VarArratCreate([0,21],VarByte);
不行!

2 我把参数都改为
var
R_Buffer : Variant;
RxBuffer : OleVariant;
但此时R_Buffer[1]:=RxBuffer[0];就要变成R_Buffer:=RxBuffer;了
这时,运行时没错 ,但错误出现在 until 语句上了;
说什么cannot convert type ‘olestr’to type ‘boolean’
还是不行。

看了一个程序例子,它就是这么写的啊
请高手赐教~~!!
3x

...全文
79 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
aiirii 2004-06-24
  • 打赏
  • 举报
回复
var RxBuffer : Variant;
...
Case MSComm1.CommEvent of
ComEvReceive:
begin
RxBuffer :=MSComm1.Input;
for I:=low(RxBuffer) to high(RxBuffer) do
R_Buffer[i] := RxBuffer[i];

end;
yinweixian 2004-06-24
  • 打赏
  • 举报
回复
关注!
yueshujiang 2004-06-24
  • 打赏
  • 举报
回复
www.delphiboy.com

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧