var
  Comm1: array[0..31] of BYTE;
  b,v:byte;
  i:integer;
  s,s1:string;
  sendstr:string;
begin
    MSComm1.CommPort := 1;
    MSComm1.InBufferSize := 30000;
    If MSComm1.PortOpen = False Then MSComm1.PortOpen := True;    Comm1[0] := 12;   //'要操作的块号
    Comm1[1] :=$60;  //  '密码类型  &H60:keyA   &H61:keyB
    Comm1[2] := 3;   // '命令类型  1:取IC卡号;2:读卡;3:写卡;
    Comm1[3] := $FF; //'密码
    Comm1[4] := $FF ;
    Comm1[5] := $FF;
    Comm1[6] := $FF;
    Comm1[7] := $FF;
    Comm1[8] := $FF;  // '密码结束
    Comm1[9] := Comm1[0] Xor Comm1[1] Xor Comm1[2] Xor Comm1[3] Xor Comm1[4] Xor Comm1[5] Xor Comm1[6] Xor Comm1[7] Xor Comm1[8];
    Comm1[10] := $01  ; //'卡数据
    Comm1[11] := $02   ;
    Comm1[12] := $03    ;
    Comm1[13] := $04     ;
    Comm1[14] := $05       ;
    Comm1[15] := $0       ;
    Comm1[16] := $0           ;
    Comm1[17] := $0         ;
    Comm1[18] := $0         ;
    Comm1[19] := $0   ;
    Comm1[20] := $0     ;
    Comm1[21] := $0      ;
    Comm1[22] := $0       ;
    Comm1[23] := $0        ;
    Comm1[24] := $0        ;
    Comm1[25] := $0 ;// '卡数据结束
    Comm1[26] := $A2;  //'IC卡号
    Comm1[27] := $E8 ;
    Comm1[28] := $98 ;
    Comm1[29] := $A8 ; //'IC卡号结束
    v := Comm1[0];
    For i := 1 To 29  do
        v := v + Comm1[i];    Comm1[30] := v Mod 256 ;//'和校验
    b := Comm1[0]       ;
    For i := 1 To 30 do
        b := b Xor Comm1[i]   ;    Comm1[31] := b ; // '异或校验  
    for  i:=0 to 31 do
      begin
        s:=s+intToStr(comm1[i]);
      end;    MSComm1.Output:=s;   //   '发送命令
MSComm1.PortOpen := false;我的问题是:  MSComm1.Output:=s;  这行和前面的几行的FOR 那里应该怎么写啊???   谢谢了.

解决方案 »

  1.   

        for  i:=0 to 31 do 
          begin 
            s:=s+intToStr(comm1[i]); 
          end; 
    ----是这里?setLength(s,32);
    CopyMemory(@s[1],Comm1,32);
    MSComm1.Output:=s;
      

  2.   

    MSCOMM丢包时是用string型吗?? 不是用PChar吗?SPCOMM丢包过程
    var 
      pBuf : PChar
      sTmp : string;
    begin 
      sTmp := '';
      pBuf := AllocMem(32);
      for  i:=0 to 31 do 
      begin
        pBuf[i] := Char(Comm1[i]);
        sTmp := sTmp + format('%2.2x ',[Comm1[i]]); //直接显示16进制数据
      end;
      MSComm1.Output:=pBuf; 
      freemem(pBuf);
    end;