读书人

串口通讯下使用move函数报错的有关问题

发布时间: 2012-03-18 13:55:38 作者: rapoo

串口通讯下使用move函数报错的问题? 有点急!!!
用SPCOMM写了个串口的程序,在接收的事件里这样写:

procedure TMainForm.comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
rbuf: array[0..1024] of byte;
begin

...............

move(buffer^, pchar((@rbuf)^), BufferLength);

.....................

end;

如果接收到的数据 BufferLength <30 都没有问题,但是超过这个数那系统就会自动关闭退出,提示非法访问内存。
但是奇怪的是,在我自己调试的电脑上不会有这个错误,在其他没有安装DELPHI的电脑就会有错误提示,请问这和什么
有关系呢?

[解决办法]
那我来jf了
呵呵
[解决办法]
jf的灰过
[解决办法]
procedure TMainForm.comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
rbuf: Array of char;
begin

...............
GetMem(rbuf,BufferLength);
try
move(buffer^, rbuf^,BufferLength);
.................
finally
FreeMem(rbuf);
end;

.....................

end;
[解决办法]

探讨
procedure TMainForm.comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
rbuf: Array of char;
begin

...............
GetMem(rbuf,BufferLength);
try
move(b……

[解决办法]
探讨
引用:
procedure TMainForm.comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
rbuf: Array of char;
begin

...............
GetMem(rbuf,BufferLength);
try
……

[解决办法]
我的方法其实跟wzwcn一样,发送汉字都没有问题。但wzwcn所提示的方法有一点点漏洞,这里我就不公开说别人的漏洞了。另外建议将rbuf: Array of char;定义改为rbuf:pchar;更简洁。
[解决办法]
探讨
引用:
能解决这个问题,我可以加分

你说反了,应该这么说:

能加分的话,肯定能解决。



因为我对串口通讯比较熟悉,而且用的控件也跟你相同。

[解决办法]
move(buffer^, pchar((@rbuf)^), BufferLength);
这种函数都不检查边界的??小心覆盖你的执行区域,怎么挂的都不知道。
既然LZ你都知道是这个函数出错了,解决应该不难才是。好好检查下你的内存操作,特别是不熟悉的操作。
很多错误都是想当然才出现的,你以为程序会怎么怎么执行,实际上不尽然。说到低,还是经验不够!

读书人网 >.NET

热点推荐