你将v定义成Olevariant类型
for i:=Low(Data) to High(Data) do 
  begin
    V[i]:=Data[i];
  end;
然后试试看!

解决方案 »

  1.   

    如果不是大数据量传递,可以参考我的代码。
    1:接收代码:
    procedure TForm1.Comm1Comm(Sender: TObject);
    var
    inputlength:integer;
    p:POleVariant;
    btest:olevariant;
    begin
    //收到 Rthreshold 个字符。该事件将持续产生直到用 Input 属性从接收缓冲区中删除数据。
    if (comm1.CommEvent=2) then
    begin
      inputlength:=comm1.inbuffercount;
      btest:= VarArrayCreate([0,inputlength-1], varByte);
      btest:=comm1.input;
        //1:接收数据
            p:=VarArrayLock(btest);
            try
                move(p^,M.ReceiBuff[M.Recei_Total],inputlength);
                M.Recei_Total:=M.Recei_Total+inputlength;
            finally
                VarArrayUnlock(btest);
            end;
    end;
    2:发送代码
    ShortPacketLen:=1039
    function SendShortPacket(PacketConent:byte):integer;
    //发送短控制信息帧,PacketLen个PacketConent,
    var
    i:integer;
    shortoutole:olevariant;
    begin
    shortoutole := VarArrayCreate([0,ShortPacketLen-1], varByte);
    for i:=0 to ShortPacketLen-1 do  shortoutole[i]:=PacketConent; //PacketConent
    Form1.comm1.output:=shortoutole;
    repeat
    application.ProcessMessages ;
    until Form1.comm1.outBufferCount=0;
    result:=1;
    end;
    3:MSCOMM的设置:
    MSCOMM以设置成二进制方式
    comm1.CommPort :=Form_Comsele.RadioGroup1.ItemIndex+1 ;      ;
    comm1.DTREnable :=true;
    comm1.RTSEnable :=true;
    comm1.Settings :=Form_Comsele.RadioGroup3.Items.Strings[Form_Comsele.RadioGroup3.ItemIndex]+',N,8,1';
    comm1.InBufferSize :=2048;    
    comm1.OutBufferSize :=4096;  
    comm1.InBufferCount :=0;    //清除缓冲区
    comm1.OutBufferCount :=0;  //清除缓冲区
    //comm1.SThreshold :=1;  //发送缓冲区数据全部发送完时,触发
    //comm1.InputLen :=1;    //每次接受一个字符
    comm1.InputLen :=0;    //每次读空缓冲区
    comm1.SThreshold :=0;  //发送缓冲区数据全部发送完时,禁止触发
    comm1.RThreshold :=1;  //收到一个字符,触发一次
    comm1.PortOpen:=true;
    comm1.Output:='ATQ0E0V1W0S0=1&C1&D2&K3'+chr(13)+chr(10); //  
      
      

  2.   

    //发送二制数组
    var 
      outByte:array of byte;
      i:integer;
    begin
      setlength(outByte,200);
      for i:=1 to 200 do
        outByte[i]:=i;//i就是要发送的值
      mscomm1.output:=outByte;
    end;
    //接收二制数组mscomm1.inputmode:=1;
    var 
      inByte:array of byte;
      i:integer;
      t:integer;
    begin
      inbyte:mscomm1.input;
      t:=varArrayhighbound(inbyte);
      for i:=0 to t do
        r:=inbyte[i];//取出接收的字节进行处理
    end;