简单的写一下代码
      bbb := vararraycreate([0, 6],varByte);
     bbb[1] := $FF;
     bbb[2] := $00;
     bbb[3] := $13;
     bbb[4] := $07;
     bbb[5] := $00;
     bbb[6] := $D9;
在赋值的时候跟踪,提示variant of Byte,不能察看,于是 watch窗口 bbb,10m 可以看到$12 $20 $00 ....$00,与我赋的值不一样,而采用静态数组,值是一样的,在后面的写文件部分
     WriteFile(HCom1,bbb,7,tmplen,nil);
写出来的数据是$12 $20 $00 ....$00,而不是我所希望的数据这是为什么呢??

解决方案 »

  1.   

    var
      V1, V2, V3, V4, V5: Variant;
      I: Integer;
      D: Double;
      S: string;
    begin
      V1 := 1; { integer value }
      V2 := 1234.5678; { real value }
      V3 := 'Hello world!'; { string value }
      V4 := '1000'; { string value }
      V5 := V1 + V2 + V4; { real value 2235.5678}
      I := V1; { I = 1 (integer value) }
      D := V2; { D = 1234.5678 (real value) }
      S := V3; { S = 'Hello world!' (string value) }
      I := V4; { I = 1000 (integer value) }
      S := V5; { S = '2235.5678' (string value) }end;
      

  2.   

    然后我给你解释一段赋值
              bbb[1]   :=   $FF;
             
            push 01
            push 01
            lea eax,[ebp-$28]
            mov edx,$000000ff
            mov cl,$01
            call @varformint
            .....
            call @vararrayput而在varformint时候保存进去的是
        11 00 00 00 00 00 00 00
        ff 00 00 00 00 00 00 00
    所以我认为variant在内存中保存应该是保存类型,保存值,这样的.
    而你在watch看到的应该是这个variant的内存地址而已,然后你去mov当然也不对了.
      

  3.   

    variant类型不像数组那样直接地址就是数据.
      

  4.   

    是啊,要看cpu窗口。
    读出时是这样:
    var t:byte;
    ....
    t:=bbb[6];