Ok, danke.
Allerdings habe ich das irgendwie noch nicht ganz auf der Reihe. Folgender Ablauf:
Der Node wird erstellt:
Delphi-Quellcode:
fORPNode := TORPNode.Create;
fORPNode.Subnodes := TObjectList.Create;
Anschließend wird er über eine Schleife mit Daten gefüllt:
Delphi-Quellcode:
if fRegAttrExpr.Match then
repeat
case AnsiIndexText(fRegAttrExpr.SubExpressions[1], AllOSMElements) of
ATTR_ID:
begin
fORPNode.ID := StrToInt(fRegAttrExpr.SubExpressions[3]); //Hier steht dann z.B. 123456
end;
ATTR_LAT:
begin
fORPNode.MercLat := StrToFloat(fRegAttrExpr.SubExpressions[3]); //Hier bspw. 53,45356645
end;
ATTR_LON:
begin
fORPNode.MercLon := StrToFloat(fRegAttrExpr.SubExpressions[3]); //Hier bspw. 8,8234554
end;
end;
until not fRegAttrExpr.MatchAgain;
Dann wird das Object zum TIntegerDictionary zugefügt:
Delphi-Quellcode:
procedure TORPTree.AddNodeToList(Node: TORPNode);
begin
fNodes.Add(Node.ID, Pointer(Node));
end;
Jetzt muss ich das Objekt wieder auslesen. Das geschieht so:
Delphi-Quellcode:
var
ptr: Pointer;
{...}
ATTR_REF:
begin
if fORPTree.Nodes.Find(StrToInt(fRegAttrExpr.SubExpressions[3]), ptr) then
begin
fORPSubNd := TORPNode(ptr^);
fORPWay.SubNodes.Add(fORPSubNd);
end;
In
fRegAttrExpr.SubExpressions[3] steht laut Debugger "20958823". Wenn ich mir jetzt im Debugger fORPSubNd anzeigen lasse, dann sieht das z.B: so aus:
Code:
fORPSubNd.ID = 1685016144
fORPSubNd.MercLat = 2,4587345897e-307
fORPSubNd.MercLon = 0
Der Eintrag wurde aber mit der o.g. genannten ID in der TIntegerDictionary gefunden, sonst wäre er ja nicht in den IF-Block gesprungen. Und theoretisch sollte in ID genau dieser Wert (20958823) stehen.
Was mache ich falsch?
P.S.: Ich vermute ja, ich schieße mit den Pointern falsch um mich. Aber eigentlich sieht das für mich ganz logisch aus.