Hallo !
Ich habe hier eine abgeleitete TObjectList die ich mit eigenen Objekten befülle:
(Der Code ist frisiert, damit ich das Problem einfacher darstellen kann)
Delphi-Quellcode:
function TMyItemList.NewMyItem(a1,a2,a3:Integer):TmyItem;
begin
Result := NIL;
Result := TmyItem.Create(Self);
Result.V1 := a1;
Result.V2 := a2;
Result.V3 := a3;
Self.Add(Result);
end;
Soweit so gut ... Ich kann ohne Probleme auf die Objekte zugreifen:
Delphi-Quellcode:
procedure TmyItemList.SchleifMich;
var i:Integer;
begin
for i := 0 to Self.Count-1 do
begin
if TmyItem(Items[i]).V1 > 0 then
beep;
end;
end;
Aber: Versuche ich zu sortieren bekomme, ich eine Zugriffsverletzung.
Ich würde ja vermuten, daß ich nur "gültige" Pointer also vom passenden Typ (TmyItem) in der Funktion vorfinde.
Schließlich gib es nur die eine Funktion um Objekte zuzufügen.
Das ist auch in 99% der Fälle so ... dann plötzlich finde ich einen Pointer der ins Nichts zeigt.
Delphi-Quellcode:
function MyListCompare(pmyItem1, pmyItem2: pointer): integer;
begin
Result := 0
if TmyItem(pmyItem).V1 > TmyItem(pmyItem).V2 then Result := 1;
if TmyItem(pmyItem).V1 < TmyItem(pmyItem).V2 then Result := -1;
end;
procedure TMyItemList.DoSort
begin
Self.Sort(MyListCompare);
end;
Meine Vermutung ... ich mache was beim Erzeugen falsch.
Die Funktion NewMyItem wird einmal von außen gecallt und einmal über eine Funktion im Objekt:
Delphi-Quellcode:
Procedure TmyItemList.AddMySpecialItem;
begin
Self.NewMyItem(1,2,3);
end;
versus
Delphi-Quellcode:
procedure fmain.CallIt
begin
getMyItemList.NewItem(99,88,77);
end;
Sollte doch eigentlich keinen Unterschied machen.
Ich bin ratlos
help, please