请问‘variant is not an array’是什么错误。(100分)

  • 主题发起人 主题发起人 asaili
  • 开始时间 开始时间
A

asaili

Unregistered / Unconfirmed
GUEST, unregistred user!
我是用在串口通讯时,接受缓冲区数据时发生的:
procedure TForm1.MSComm1Comm(Sender: TObject);
var
buffout:OleVariant;
buffin:OleVariant;
begin
buffout:=VarArrayCreate([0,5],varbyte);
buffin:=VarArrayCreate([0,5],varbyte);
case MSComm1.CommEvent of
comEvSend : exit;
comEvReceive:
begin
if isdatas=false then
begin
buffout:=MSComm1.Input;
group:=buffout[0]; -----发生在这里!!
 
类型转换错误。。
 
group is integer
 
>>buffout:=MSComm1.Input;
buffout已经得到了MSComm1.Input的输出,不再是数组了啦.
 
你用断点看看BUFFER中是否真的有资料呢?
请问你那儿有没有MSCOMM编程的较详细的说明?我以前用VB写的一个端口程序改到Delphi下
后居然有问题.在VB下能全部读出来,而在Delphi下就只能读一下,为何?
 
:databox:
老大我也是将VB程序改到DELPHI下就出错了,还是偶尔出错,一会可以,突然会冒出上面的错误
 
应该在使用前要VarArrayLock一下吧,D5 help里就有这么个Example

type
PArrayData = ^TArrayData;
TArrayData = array[0..9, 1..3] of Integer;
var
A: Variant;
P: PArrayData;
I, J: Integer;
begin
A := VarArrayCreate([1, 3, 0, 9], varInteger);
P := VarArrayLock(A);
try
for I := 0 to 9 do
for J := 1 to 3 do
P^[I, J] := J * 10 + I;
finally
VarArrayUnlock(A);
end;
WriteLn(A[1, 9]); { 19 }
WriteLn(A[3, 4]); { 34 }
end;

 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
948
import
I
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
I
回复
0
查看
747
import
I
后退
顶部