求VarArrayCreate用法 求VarArrayCreate用法,详细些,本人是新手,谢谢各位指导!!!delphi帮助文档没看懂;VARARRAYCREATE 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谢谢你 我还想问问 下面是我的代码;procedure TForm1.Button2Click(Sender: TObject);varstr,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; 如果没有红色的那句话就出错了,为什么呢?蓝色部分我不是已经定义了一个任意的类型吗? ByteArray:OLEVARIANT;这只是定义任意类型,但是你不能把它用作数组因为后面有ByteArray[0]:=m;所以红色ByteArray:=VARARRAYCREATE([0,0],VARBYTE);必须要有 这个问题问得太广泛,不好回答。串口方面我也不了解。你想接受一个任意类型数据,就用声音明一个variant,多个就用数组。你的意思是一个变量接受多个数据么,那也行啊,每次接受数据,使用完后后,重新给变量赋值 就是将我最后一段代码这么改,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 是不是得到一个整型的数??? 类型匹配你知道么, mscomm1.output这是什么类型啊原来代码中ByteArray[0]:=m; 这句话是不是表示将一个整型的m 赋值给数组吧???mscomm1.output:=ByteArray; 这句话运行之后 mscomm1.output 是不是得到一个整型的数???从这来看mscomm1.output是一个指针啊,赋值为ByteArray是数组的首地址你写成这样 ByteArray:=m;(此处直接是整型的赋值吧?)是整型赋值 mscomm1.output:=ByteArray;类型不匹配,肯定会报错 资料是这么写的:mscomm的Output属性用于向发送缓冲区写数据流。属性为VARIANT变量。该属性在端口未打开时不可用,在运行时只是写的。注意:Output属性可以发送文本数据或二进制数据。传输文本数据时,应该将字符型数据放入VARIANT变量中;传输二进制数据(即按字节传送)时,应将字节型数据放入VARIANT型变量中。如果通常给应用程序发送ANSI字符串,可以以文本方式发送。如果数据包含了内嵌控制字符、NULL字符等,必须将其作为二进制传递过去。非常感谢你的热心解答,看来我的多学习pascal的语法,特别是变量、数组那一块,有相关资料的话推荐一下,谢谢!! ByteArray:=VARARRAYCREATE([0,0],VARBYTE);其实这可以看成是 ByteArray:array[0..0] of byte;只有一个元素字节流你好好想想吧,很多传递都是以流的形式。你这个资料也写得很明白 Delphi下如何读写大文件,这个问题困扰我好久了。 一个DBChart的问题 收到了google关于“google和yahoo在打架”的回复 以前有一本delphi的chm电子书,出了好几期,好像有11M 23M 之多, 简单!!!!大家有做有做流媒体的吗? 请教在listview连同文件与该文件所对应的图标一起显示的问题。 问二个比较幼稚的问题,但还是高分请教。 数据结构 过程的退出 小小case delphi线程问题又出错了还请各位多多赐教 下载了一个很大的txt,里面每隔几行就有几段多余的字段,一个个删很麻烦
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; 如果没有红色的那句话就出错了,为什么呢?蓝色部分我不是已经定义了一个任意的类型吗?
因为后面有ByteArray[0]:=m;
所以红色ByteArray:=VARARRAYCREATE([0,0],VARBYTE);必须要有
你想接受一个任意类型数据,就用声音明一个variant,多个就用数组。你的意思是一个变量接受多个数据么,那也行啊,每次接受数据,使用完后后,重新给变量赋值
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 是不是得到一个整型的数???
ByteArray[0]:=m; 这句话是不是表示将一个整型的m 赋值给数组吧???
mscomm1.output:=ByteArray; 这句话运行之后 mscomm1.output 是不是得到一个整型的数???
从这来看mscomm1.output是一个指针啊,赋值为ByteArray是数组的首地址你写成这样
ByteArray:=m;(此处直接是整型的赋值吧?)是整型赋值
mscomm1.output:=ByteArray;
类型不匹配,肯定会报错
mscomm的Output属性用于向发送缓冲区写数据流。
属性为VARIANT变量。该属性在端口未打开时不可用,在运行时只是写的。
注意:Output属性可以发送文本数据或二进制数据。传输文本数据时,应该将字符型数据放入VARIANT变量中;传输二进制数据(即按字节传送)时,应将字节型数据放入VARIANT型变量中。如果通常给应用程序发送ANSI字符串,可以以文本方式发送。如果数据包含了内嵌控制字符、NULL字符等,必须将其作为二进制传递过去。
非常感谢你的热心解答,看来我的多学习pascal的语法,特别是变量、数组那一块,有相关资料的话推荐一下,谢谢!!
其实这可以看成是 ByteArray:array[0..0] of byte;只有一个元素
字节流你好好想想吧,很多传递都是以流的形式。
你这个资料也写得很明白