首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

简单有关问题,高分相送.(待...)

2012-03-22 
简单问题,高分相送.(在线等待...)自定义的一个结构TChatData再定义一个此结构的数组SendGroupMessage:arra

简单问题,高分相送.(在线等待...)
自定义的一个结构TChatData
再定义一个此结构的数组SendGroupMessage   :   array   of   TChatData;
传递参数的时候我用的是地址@SendGroupMessage
给另一个赋值的时候tempMessage   :   array   of   TChatData;
怎么处理?
tempMessage   :=   value^;???


[解决办法]
type
TChatData = record
end;

PChatDataAry = ^TChatDataAry;
TChatDataAry = array of TChatData;
var
SendGroupMessage: TChatDataAry;
...
var
TempMessage: PChatDataAry;
begin
TempMessage := @SendGroupMessage;
end;

没测试,不知道是否可以
[解决办法]
type
TChatData = record
sData : String;
end;
TChatMessage = array of TChatData;

procedure ProcessMessage(AMessage: TChatMessage);
var
tmpMessage : TChatMessage;
iCount : Integer;
iLoop : Integer;
begin
iCount := High(AMessage);
SetLength(tmpMessage, iCount + 1);
for iLoop := 0 to iCount do tmpMessage[iLoop] := AMessage[iLoop];
tmpMessage[0].sData := 'XXX ';
tmpMessage[1].sData := 'YYY ';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
SendGroupMessage : TChatMessage;
begin
SetLength(SendGroupMessage, 2);
SendGroupMessage[0].sData := '111 ';
SendGroupMessage[1].sData := '222 ';
ProcessMessage(SendGroupMessage);
ShowMessage(SendGroupMessage[0].sData);
ShowMessage(SendGroupMessage[1].sData);
end;

[解决办法]
AMessage的值实际上是个指针值, 如果这样写的话:

procedure ProcessMessage(AMessage: TChatMessage);
var
tmpMessage : TChatMessage;
begin
tmpMessage := AMessage;
tmpMessage[0].sData := 'XXX ';
tmpMessage[1].sData := 'YYY ';
end;

tmpMessage实际上就是SendGroypMessage, 而不是它的副本, 因此函数返回后, SendGroupMessage的内容被改变了。
[解决办法]
传参数时用var 不是很好嘛

热点排行