为何spcomm组件只能在ComReceiveData中采用局部变量来接受数据?想接收到全局变量该怎么办?

疯狂低调 2006-06-22 10:48:36
我用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;
...全文
308 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu9527 2006-11-24
  • 打赏
  • 举报
回复
你看一下spcomm的源程序就明白了,
spcomm commReceiveData中的buff是指向一个指针的,当它接收到的数据后会将数据存到该指针指向的地址内,所以内容是变化的,指向一个全局的pchar变量后,均会指向同一地址,会出现问题.
QQgenie 2006-06-30
  • 打赏
  • 举报
回复
我是在ComReceiveData中把经转换后数据串在一个全局变量中,并判断数据长度,当长度够了就执行一个过程处理数据.
luxuewei5214 2006-06-27
  • 打赏
  • 举报
回复
我就是用全局变量,没问题啊。接收数据需要在数据发出一段时间后,串口操作速度慢,可加适当延时,200MS左右,视数据量大小
xjjrocker 2006-06-27
  • 打赏
  • 举报
回复
应该和变量范围没有关系……
疯狂低调 2006-06-23
  • 打赏
  • 举报
回复
楼上的,若是这么简单,我还能在这里讨论这个问题么?
小呆之家 2006-06-23
  • 打赏
  • 举报
回复
你把局部变量中的值赋给全局变量不就行了吗?

哎........

小呆之家 2006-06-23
  • 打赏
  • 举报
回复
你自己不会把接收的数据用个方法处理一下吗?想做什么都行。。。。。。
疯狂低调 2006-06-22
  • 打赏
  • 举报
回复
想发送数据后立刻侦测返回的值是多少,可是发送后能立刻显示在 memo中却不能存储到全局的变量中供访问。
jubobobo 2006-06-22
  • 打赏
  • 举报
回复
没有完全明白你的意思

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧