简单问题,高分相送.(在线等待...)
自定义的一个结构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 不是很好嘛