Du legst einen Pointer auf ein TDataBaseItem, was passiert denn mit dem
TDataBaseItem? Ist es bei dem Zugriff auf Data überhaupt noch vorhanden?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| var PS: ^TStringList;
procedure Test; var S: TStringList; begin S:= TStringList.Create; PS:= @S; ShowMessage(PS^.ClassName); FreeAndNil(S); ShowMessage(PS^.ClassName); end; |
Noch etwas:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var Data: PNodeDataRecord; begin Data := VST1.GetNodeData(VST1.FocusedNode); if data <> nil then begin ShowMessage(Data^.DatabaseItem.Name); end; end; |
Bringt so gut wie gar nichts wenn VST1 seinen Data-Pointer nicht mit
NIL initiallisiert!
NIL ist nichts anderes als ein bool (True, False).
Nachtrag:
Die Lösung des Problems: Es wurde nur nach <> nil geprüft, richtig ist aber dies.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var Data: ^TDataBaseItem; begin Data := VST1.GetNodeData(VST1.FocusedNode); If Assigned(TDataBaseItem(Data^)) then ShowMessage(Data^.Name); end; |
Gruß gispos