[关于Stream的基础问题],此贴速结

xoxo5229 2005-12-14 11:32:43
我自定义的结构
比如
type
myFrame = record
name:String;
class:String;
end;

var aFrame:myFrame;

取得一个Stream后

我想 Stream.ReadBuffer(myFrame,SizeOF(myFrame ))

不过 转后 myFrame内的字符串 好像无法正常读取

请问原因,或者 应该怎么从流中读出一个record
...全文
160 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xoxo5229 2005-12-15
  • 打赏
  • 举报
回复
原来只是保存了 name, class 的指针而已。。。
happyggy 2005-12-15
  • 打赏
  • 举报
回复
定义成
type
myFrame = record
name:pchar;
class:pchar;
end;
就可以了
followwater 2005-12-15
  • 打赏
  • 举报
回复

流位置应在开始的地方
type
myFrame = record
name:String;
aclass:String;
end;
var
sf,df:myframe;
procedure TForm1.Button1Click(Sender: TObject);
var
s:tmemorystream;
begin
sf.name:='aaa';
sf.aclass:='bbbxxx';
s:=tmemorystream.Create;
s.WriteBuffer(sf,8);
s.Position:=0;
s.ReadBuffer(df,8);
edit1.Text:=df.name;
edit2.Text:=df.aclass;
end;
constantine 2005-12-15
  • 打赏
  • 举报
回复
aiirii正确
一般用shortstring,要不就用char ,不然都会出问题
很简单你读一下sizeof就知道了,不管你的string多长,最后都是8

type
myFrame = record
name:String[20];
class:String[30];
end;
就不会了
firstrose 2005-12-15
  • 打赏
  • 举报
回复
aiirii正确
aiirii 2005-12-15
  • 打赏
  • 举报
回复
type
myFrame = record
name:String;
class:String;
end;

这种结构,只是保存了 name, class 的指针而已,后一种,才真正保存你的数据进去
zsjzwj 2005-12-15
  • 打赏
  • 举报
回复
不是必须定长,而是SizeOF(myFrame )这里根本没有长度,当然会错
xoxo5229 2005-12-15
  • 打赏
  • 举报
回复
暂时,发现的一个问题是myFrame 声明中的使用的string,如果改写为定长,比如
type
myFrame = record
name:String[20];
class:String[30];
end;
之后,aFrame.name 和 aFrame.class才能正常访问
是否流中传递的东西必须是制定长度的呢

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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