怎样把16进制数EF从串口发出,最好给完整的收发原代码(收到的也是16进制的数),我用的MSCOMM控件,我真的实在想不出来了。我的代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
send:array[1..1] of byte;//因为16进制EF大于127。我所以用了BYTE。
//并且协议要求发16进制的EF。
begin
send[1]:=byte(239);
MSComm1.Output :=send[1];
//编译没错。执行时提示:无效的属性值。MSDN中查到错误号380。
end;我的QQ:83743478。[email protected]

解决方案 »

  1.   

    var
      vTmp:variant;
    begin
      if not MsCommCall.PortOpen then begin
        AddLog(Translate('IdleError','Comm closed when send idle code!'),false);
        exit;
      end;
      vTmp:=VarArrayCreate([0,0],varByte);
      vTmp[0]:=Byte(239);//the code is 0xefh
      MsCommCall.Output:=vTmp;
    www.tonixsoft.com
      

  2.   

    谢谢TONYLK(TONY),我用的你方法已经成功。看来我对DELPHI了解的太少了。真的感谢你哈。还要分不,再给你。也谢谢jpyc(九品御厨——智若愚) 。我将和你联系。
      

  3.   

    TONYLK(TONY):你好,我还想问问:
    我原来的程序错在那里了?请指教!
      

  4.   

    一切OK,TONYLK(TONY),你在那里,在成都没有,我请你吃饭?好不好?
      

  5.   

    MsComm是一个comm组件,com组件使用的参数大多是OleVariant型的,
    使用你原来的方法传的只是一个字符,而字符在127以上的就属于扩展字符了。反正这个组件是不认的,所以就必须使用variant型
    具体的我也不太明白,可以参考一下《Delphi串口通信编程》一书,讲到一部分。要请我吃饭??你要到上海来请我了。。呵呵。。
      

  6.   

    output是variant类型,不能用静态数组,要用动态数组
    动态数组的定义:
    buf:array of byte
    mscomm的读:
    var
      B:variant;
      I:word;
      InByte: Array of Byte;
      m16: String;
      Begin
       B:=MsComm1.input;
        if length(b)=0 then
        exit;
        SetLength(InByte,length(b));
        inByte:=b;
         For I:=Low(InByte) To High(InByte) Do begin     
         M16:=intTohex(inbyte[i],2);
         showmessage(M16)
                             end;
          end;MScomm写:
    var bf:array of byte;
    begin
    SetLength(Bf,2);bf[0]:=2;
    bf[1]:=6;
    Buf:=Bf;mscomm1.Output:=Buf;
    end;
      

  7.   

    OK,谢谢各位了。我要去找个OBJECT PASCAL来好好看看。呵,也说不定我那天就到上海来了呢。到时候和你联系。