我在程序里面用了很多结构体,并要把这些结构体保存在一个TLIST中,
比如:
PMsgToClient=^TMsgToClient
TMsgToClient = packed record
head: THead;
sys_id: CodeArray;
msg_id: Integer;
MsgText: MsgArray;
end; 在实际操作中我要定义一个PMsgToClient类型的全局变量,把TMsgToClient中的值赋过来,
简单的方法是同样定义一个TMsgToClient的全局变量,然后复制,
再
new(PMsgToClient);
PMsgToClient:=@TMsgToClient;
list.add(PMsgToClient);
想问下有没有别的较好的方法,比如用move,在此多谢了
比如:
PMsgToClient=^TMsgToClient
TMsgToClient = packed record
head: THead;
sys_id: CodeArray;
msg_id: Integer;
MsgText: MsgArray;
end; 在实际操作中我要定义一个PMsgToClient类型的全局变量,把TMsgToClient中的值赋过来,
简单的方法是同样定义一个TMsgToClient的全局变量,然后复制,
再
new(PMsgToClient);
PMsgToClient:=@TMsgToClient;
list.add(PMsgToClient);
想问下有没有别的较好的方法,比如用move,在此多谢了
Move(源指针,目标指针,sizeof(TMsgToClient))
for i:=0 to 9 do
list.add(GetMemory(TMsgToClient ));
PMsgToClient:= list.item[0];
直接这样用就可以
(失踪的月亮)
代码里TMsgToClient这个往往是个函数中变量,地址空间在用完后也是要释放的吧,我使过这样,不过LIST中的值都是最后一次添加的数据,不知道是不是我写法的问题。
所以我想把局部变量中的内容复制到我定义的全局变量中,每次new(),然后用LIST添加这个地址。
我试了下1楼的方法,是可以的,不过要再定义一个PMsgToClient,没有别的我就先用这个来解决了
TMsg=packed record
ksdm:string;
czydm:string;
czyxm:string;
end;
var
Form1: TForm1;
pm:PMsg;
implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);
var
msg:Tmsg;
begin
msg.ksdm:='0001';
msg.czydm:='0019';
msg.czyxm:='wander';
new(pm);
move(msg,pm^,sizeof(msg));
showmessage(pm^.czyxm);
end; 貌似这样也是可以,直接操作结构体
p:PMsgToClient;
msg:TMsgToClient;
begin
msg.msg_id:=100;
new(p);
move(msg,p^,sizeof(TMsgToClient));
list.Add(p);
end;