求VarArrayCreate用法,详细些,本人是新手,谢谢各位指导!!!delphi帮助文档没看懂;VARARRAYCREATE

解决方案 »

  1.   

    谢谢你  我还想问问 下面是我的代码;
    procedure TForm1.Button2Click(Sender: TObject);
    var
    str,STR1:string;
    i,J,k,m:integer;
    ByteArray:OLEVARIANT;
    begin
        ByteArray:=VARARRAYCREATE([0,0],VARBYTE);
        str:='68';                      //开始码
        str:=str +'20';                //仪表类型=热量表
        STR1:=TRIM(EditMeterID.Text);
        STR:=STR+COPY(STR1,1,2);
        STR:=STR+COPY(STR1,3,2);
        STR:=STR+COPY(STR1,5,2);
        STR:=STR+COPY(STR1,7,2);
        STR1:=TRIM(EDIT39.Text);
        STR:=STR+COPY(STR1,1,2);
        STR:=STR+COPY(STR1,3,2);
        STR:=STR+COPY(STR1,5,2);    str:=str +'04';            
        str:=str +'0A';          
        str:=str +'A0';           
        str:=str +'15';           
        str:=str +'00';           
        str:=str+formatdateTime('ss''''nn''''hh''',datetimepicker2.Time );
        str:=str+formatdatetime('dd''''MM''''yy''',datetimepicker1.date);
        str:=str+'20';
        str:=str+buildvalidate(str);    //校验和
        str:=str +'16';                //结束码
        edit34.Text:=str;    k:=1;
        for  i:=1 to 23 do
        begin
          m:=STRTOINT('$'+COPY(str,k,2));
          ByteArray[0]:=m;
          mscomm1.output:=ByteArray;
          k:=k+2;
        end;end;  如果没有红色的那句话就出错了,为什么呢?蓝色部分我不是已经定义了一个任意的类型吗?
      

  2.   

    ByteArray:OLEVARIANT;这只是定义任意类型,但是你不能把它用作数组
    因为后面有ByteArray[0]:=m;
    所以红色ByteArray:=VARARRAYCREATE([0,0],VARBYTE);必须要有
      

  3.   

    这个问题问得太广泛,不好回答。串口方面我也不了解。
    你想接受一个任意类型数据,就用声音明一个variant,多个就用数组。你的意思是一个变量接受多个数据么,那也行啊,每次接受数据,使用完后后,重新给变量赋值
      

  4.   

    就是将我最后一段代码这么改,
    var
       ByteArray:Olevariant;
    .....(省略)
        k:=1;
        for  i:=1 to 23 do
        begin
          m:=STRTOINT('$'+COPY(str,k,2));
          ByteArray:=m;(此处直接是整型的赋值吧?)
          mscomm1.output:=ByteArray;
          k:=k+2;
        end;
    这样好像也报错;
    其实我就想知道:用mscomm控件的发送和接收中,如果inputmode属性选择1 - comInputModeBinary后,发送和接收的时候,应该是什么类型的,是二进制吗?
    原来代码中
    ByteArray[0]:=m;  这句话是不是表示将一个整型的m 赋值给数组吧???
    mscomm1.output:=ByteArray;   这句话运行之后 mscomm1.output 是不是得到一个整型的数???
      

  5.   

    类型匹配你知道么, mscomm1.output这是什么类型啊原来代码中
    ByteArray[0]:=m;  这句话是不是表示将一个整型的m 赋值给数组吧???
    mscomm1.output:=ByteArray;   这句话运行之后 mscomm1.output 是不是得到一个整型的数???
    从这来看mscomm1.output是一个指针啊,赋值为ByteArray是数组的首地址你写成这样
         ByteArray:=m;(此处直接是整型的赋值吧?)是整型赋值
          mscomm1.output:=ByteArray;
    类型不匹配,肯定会报错
     
      

  6.   

    资料是这么写的:
    mscomm的Output属性用于向发送缓冲区写数据流。
    属性为VARIANT变量。该属性在端口未打开时不可用,在运行时只是写的。
    注意:Output属性可以发送文本数据或二进制数据。传输文本数据时,应该将字符型数据放入VARIANT变量中;传输二进制数据(即按字节传送)时,应将字节型数据放入VARIANT型变量中。如果通常给应用程序发送ANSI字符串,可以以文本方式发送。如果数据包含了内嵌控制字符、NULL字符等,必须将其作为二进制传递过去。
    非常感谢你的热心解答,看来我的多学习pascal的语法,特别是变量、数组那一块,有相关资料的话推荐一下,谢谢!!
      

  7.   

    ByteArray:=VARARRAYCREATE([0,0],VARBYTE);
    其实这可以看成是 ByteArray:array[0..0] of byte;只有一个元素
    字节流你好好想想吧,很多传递都是以流的形式。
    你这个资料也写得很明白