串口通讯下使用move函数报错的有关问题? 有点急
串口通讯下使用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;
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
我的方法其实跟wzwcn一样,发送汉字都没有问题。但wzwcn所提示的方法有一点点漏洞,这里我就不公开说别人的漏洞了。另外建议将rbuf: Array of char;定义改为rbuf:pchar;更简洁。
------解决方案--------------------
------解决方案--------------------
move(buffer^, pchar((@rbuf)^), BufferLength);
这种函数都不检查边界的??小心覆盖你的执行区域,怎么挂的都不知道。
既然LZ你都知道是这个函数出错了,解决应该不难才是。好好检查下你的内存操作,特别是不熟悉的操作。
很多错误都是想当然才出现的,你以为程序会怎么怎么执行,实际上不尽然。说到低,还是经验不够!
用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;
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
我的方法其实跟wzwcn一样,发送汉字都没有问题。但wzwcn所提示的方法有一点点漏洞,这里我就不公开说别人的漏洞了。另外建议将rbuf: Array of char;定义改为rbuf:pchar;更简洁。
------解决方案--------------------
------解决方案--------------------
move(buffer^, pchar((@rbuf)^), BufferLength);
这种函数都不检查边界的??小心覆盖你的执行区域,怎么挂的都不知道。
既然LZ你都知道是这个函数出错了,解决应该不难才是。好好检查下你的内存操作,特别是不熟悉的操作。
很多错误都是想当然才出现的,你以为程序会怎么怎么执行,实际上不尽然。说到低,还是经验不够!