我用spcomm组件进行数据的发送,下位机也能及时地返回数据(通过串口精灵观察到)。但是我在一个按钮下写入如下代码(功能为发送数据并且判断接收到的数据) com.WriteCommData('??',2);
if s='!' then showmessage('接受') else showmessage('空白'); //s 为接收函数填入数据,定义为公共变量我是想实现 发送数据后,侦测其返回值(下位机会立即返回数据),但是一直没有实现,这是为什么。接收端如下procedure TfrmMain.ComReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);// var
// s: string;
begin //move(Buffer^,ReceiveOrder,BufferLength); SetLength(S, BufferLength); 。
Move(Buffer^, PChar(S)^, BufferLength);// s如果是公共变量,则发送时不能立刻得到返回
end;
if s='!' then showmessage('接受') else showmessage('空白'); //s 为接收函数填入数据,定义为公共变量我是想实现 发送数据后,侦测其返回值(下位机会立即返回数据),但是一直没有实现,这是为什么。接收端如下procedure TfrmMain.ComReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);// var
// s: string;
begin //move(Buffer^,ReceiveOrder,BufferLength); SetLength(S, BufferLength); 。
Move(Buffer^, PChar(S)^, BufferLength);// s如果是公共变量,则发送时不能立刻得到返回
end;
spcomm commReceiveData中的buff是指向一个指针的,当它接收到的数据后会将数据存到该指针指向的地址内,所以内容是变化的,指向一个全局的pchar变量后,均会指向同一地址,会出现问题.