我的情况是这样的。发送端:
var
  Vbuf:Variant;
begin
...
  //复制的一串二进制数据,长度为30。
  Vbuf:='覤菄40B$覥$崙竦?揙?,a跗?{'; 
  
  mscomm1.output:=Vbuf;
...
end;接受端:
var
  Vbuf:Variant;
  buffer:array[1..30] of byte;
begin
...
  Vbuf:=mscomm1.input;
  buffer[i]:=Ord(string(TVarData(Vbuf).VString)[i]);
  //接着把它保存为文件。BlockWrite(DestFile,buffer,30,BytesWrite);可是保存文件后,里面有数据跟发送端发过来的不一样。不知道为什么。可我在接受端直接给Vbuf赋值:='覤菄40B$覥$崙竦?揙?,a跗?{';接着保存为文件后,数据是正确的。也就是说:buffer[i]:=Ord(string(TVarData(Vbuf).VString)[i]);这句话是没错的。
...
end;不知道,大家明白我的意思没有。反正,就是数据接受不正确。请大家帮忙,我错在哪里?
谢谢了!

解决方案 »

  1.   

    还有,我在接受端把 mscomm1.InputMode:=1;  //comInputModeBinary 二进制的形式的了。
      

  2.   

    buffer: string;
    begin
     ... buffer := Vbuf;
      

  3.   

    你说了一大堆的废话!对我一点帮助都没用。我下次结分时顶多给你1分。
    如果问题像你这么简单就好了,再说你的例子我都会。我是用串口通讯传输文件的。那有你这么简单啊。
    你上面写了这么多就第一句话是你自己写的,其它都是拷贝来的。而且move(buffer^,pchar(@rbuf^),bufferlength);连这个函数都是用错的!应该是这样的:move(buffer^,pchar(@rbuf)^,bufferlength); 给你一分算是便宜你了!
      

  4.   

    传输文件啊!好说!
    对于文件传输,你到http://www.gjwtech.com/网站参考一下!
    关于文件的传输你必须要用到“流”
    具体实现我还是推荐你使用spcomm
    关于你用的这个控件的用法,请查询系列网站!有信息的。
    我一直用SPCOMM但是有个项目用的就是你用的控件!不过只是传输一些文字的!
      

  5.   

    接收到的长度是不是一样的?还有接收指针地址是不是弄错了?
    我写了很多串口的应用,但没用过MSComm, 不清楚
      

  6.   

    尽量不要用 Variant
    use array[0..YourChoice] of char;
      

  7.   

    经过我的努力,问题总算解决了。原因在于用mscomm接收时,前32字节不是你要接受的信息,也就是从33字节开始才是发送过来的信息。
    至于用spcomm控件,我起先也是用这个控件的。用来传送一般的数据还可以。用来传文件(包手文本和二进制的图片信息)就显得不够灵活,我觉得还是用mscomm灵活多了。
    等我全部写好后,供大家一起分享!
      

  8.   

    尽量不要用 Variant
    use array[0..YourChoice] of char;
      

  9.   

    发送程序是PC还是你自己做的单片机?
    pc的话有以下可能:
      连接线路不稳定(线太长了?)
      串口线是被改造过的那种?
      通信协议不同(如停止位,波特率,奇偶校验等)
    单片机的话有以下可能:
      通讯速率讨高,有些芯片可能会有瓶颈。
      其它。。(单片机方面我不是很熟悉)
      

  10.   

    谢谢 tonylk 的帮助。能跟你交流一下吗?