Hier mal bisschen Code:
Delphi-Quellcode:
function IntGetBuddyList(var List: TdxICQBuddyList; ItemType: Word): Integer;
var
I, J: Integer;
begin
FreeBuddyList(List);
for I := low(FSSIList) to high(FSSIList) do
begin
if (FSSIList[I].ItemType = ItemType) then
begin
SetLength(List, Length(List) + 1);
ClearBuddyInfo(List[high(List)]);
if (ItemType = SSI_BUDDY) then
begin
J := GetOnlineBuddy(FSSIList[I].ItemName);
if (J <> -1) then
begin
List[high(List)] := FOnlineList[J];
end;
end;
List[high(List)].General.UIN := FSSIList[I].ItemName;
List[high(List)].SSIInfo.ItemID := FSSIList[I].ItemID;
List[high(List)].SSIInfo.GroupID := FSSIList[I].GroupID;
FillBuddyInfo(List[high(List)], FSSIList[I].TLVList);
end;
end;
Result := Length(List);
end;
Beim ersten Mal wenn ich diese Funktion aufrufe funktioniert alles perfekt wie gewünscht. Beim zweiten mal aber bekomme ich eine EInvalidPointer
Exception, aber die komischerweise erst nach Result := Length(List). Die Strings in den Records der Liste sind korrekt. Auch die Strings in den Records von FOnlineList stimmen noch.