有关指针的问题???

shylsz 2000-07-05 06:02:00
怎么把Pointer类型的值付给string类型的变量?
我在用spcomm控件时,怎么把接受到的数据显示在memo里,我用下的语句有时可以收到,
但有时又收不到,真是火达!!!

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
st:string;
pch:pchar;
begin
// getmem(pch,bufferlength);
system.Move(buffer,pch,bufferlength);
st:=strpas(pch);
memo1.Lines.Add(st);
// freemem(pch);
end;

发送用
procedure TForm1.BitBtn2Click(Sender: TObject);
var
pch:pchar;
size:word;
begin
size:=length(edit1.text) + 1;
//getmem(pch,size);
pch:=pchar(edit1.Text+#13);
comm1.WriteCommData(pch,size);
//freemem(pch);
end;

...全文
105 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Crob 2001-03-14
  • 打赏
  • 举报
回复
试试看下面的可能会行。

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var ct:TCustInfo;
m_bf:PChar;
st:string;
begin
m_bf:=StrAlloc(BufferLength);
StrPCopy(m_bf, string(buffer^) );

st:=string(m_bf));
memo1.Lines.Add(st);

dispose(buffer);

end;

没试过的,不管对错通知一声我呀! crob@263.net
yeah 2000-07-05
  • 打赏
  • 举报
回复
对不起,上面SendData过程中,Try下面的语名应为Edit1.GetTextBuf(P,iSize);
yeah 2000-07-05
  • 打赏
  • 举报
回复
临时想的,未经测试,你可以试一下:
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
Var
P:PChar;
begin
GetMem(P,BufferLength);
try

System.Move(Buffer^,P^,BufferLength);
Memo1.Lines.Add(StrPas(P));

finally
FreeMem(P);
end;

end;

procedure TForm1.SendData;
Var
P:PChar;
iSize:Integer;
begin
iSize:=Edit1.GetTextLen+1;
GetMem(P,iSize);

try
Edit2.GetTextBuf(P,iSize);
Comm1.WriteCommData(P,iSize);

finally
FreeMem(P);
end;

end;

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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