问:串口通信中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