MSCOMM完美发送接收string类型

来源:互联网 发布:鬼怪服装知乎 编辑:程序博客网 时间:2024/06/09 17:34

今天在用MSCOMM发数据的时候,碰到点问题,MSCOMM的OutPut属性是OLEVariant类型

在发送string类型的时候,会自动将string强制转换成widestring类型,当发送含有ascii码大于127的字符串的时候,就会造成丢失字节问题,解决方法如下:

发送:

procedure SendMessage(AMessage: String);
var
  len,I : integer;
  temp:Variant;
begin
  len:=length(AMessage);
  temp := VarArrayCreate([0, len-1], varbyte);
  for I := 0 to len-1 do    // Iterate
  begin
     temp[i] := ord(char(AMessage[i+1]));
  end;    // for
  MSComm1.Output := temp;
end;

注意在VarArrayCreate的帮助中有这样一句话

Variant arrays with an element type of varByte are the preferred method of passing binary data between OLE Automation controllers and servers.

接收:

接收就简单多了

procedure ReceiveData(Sender: TObject);
var
  temp: array of byte;
  S:string;
begin
  case FComm.commEvent of
    comEvReceive:
    begin
      temp := MScomm1.input;
      s:=string(temp);   //S里面放的就是最后结果
    end;
  end;
end;

原创粉丝点击