我的情况是这样的。发送端:
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;不知道,大家明白我的意思没有。反正,就是数据接受不正确。请大家帮忙,我错在哪里?
谢谢了!
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;不知道,大家明白我的意思没有。反正,就是数据接受不正确。请大家帮忙,我错在哪里?
谢谢了!
解决方案 »
- 【急】这是个什么错误,怎么解决???
- 关闭程序时,有时报错
- 杭州招DELPHI程序员
- 我用 SQL MONITOR 怎么监视不到程序的数据库连接信息呢
- 问题:一个关于DELPHI 调用SQL2000存储过程的问题:
- 怎样才能更好的控制同时并发时用户对数据库的操作,不会让数据资料被改动。请举例!
- 函数调用:
- 请教一个问题,有关NMsmtp控件中的函数:nmsmtp1.verify(s:string):boolean 新年快乐!
- 未注册过的事件的响应问题?
- 谈谈Delphi/C++ Builder和Visual Basic的本质区别吧
- 如何利用文件流来对文本文件加密?
- 找到新公司,挺爽。放分200。想知道是哪家公司吗?
begin
... buffer := Vbuf;
如果问题像你这么简单就好了,再说你的例子我都会。我是用串口通讯传输文件的。那有你这么简单啊。
你上面写了这么多就第一句话是你自己写的,其它都是拷贝来的。而且move(buffer^,pchar(@rbuf^),bufferlength);连这个函数都是用错的!应该是这样的:move(buffer^,pchar(@rbuf)^,bufferlength); 给你一分算是便宜你了!
对于文件传输,你到http://www.gjwtech.com/网站参考一下!
关于文件的传输你必须要用到“流”
具体实现我还是推荐你使用spcomm
关于你用的这个控件的用法,请查询系列网站!有信息的。
我一直用SPCOMM但是有个项目用的就是你用的控件!不过只是传输一些文字的!
我写了很多串口的应用,但没用过MSComm, 不清楚
use array[0..YourChoice] of char;
至于用spcomm控件,我起先也是用这个控件的。用来传送一般的数据还可以。用来传文件(包手文本和二进制的图片信息)就显得不够灵活,我觉得还是用mscomm灵活多了。
等我全部写好后,供大家一起分享!
use array[0..YourChoice] of char;
pc的话有以下可能:
连接线路不稳定(线太长了?)
串口线是被改造过的那种?
通信协议不同(如停止位,波特率,奇偶校验等)
单片机的话有以下可能:
通讯速率讨高,有些芯片可能会有瓶颈。
其它。。(单片机方面我不是很熟悉)