Nja, kopiert, dein genanntes [i] ist bei dir ein [1], aber egal.
https://github.com/superflexible/TGP...ntMainForm.pas
Außerdem ist der erste Eintrag 0 und nicht 1.
So, Pfxp_names ist erstmal ein Zeiger auf einen Record, welche einen Zeiger auf ein statisches Record-Array enthält.
Also du hast kein eigenes Pfxp_names deklariert, sondern das aus der tgputtylib.pas benutzt? (diese
Unit in den Uses)
Zitat:
:= names.names[1].filename;
Eigentlich
sollte dürfte Delphi hier alle Zeiger implizit (automatisch) dereferenzieren,
aber du kannst es ja mal explizit versuchen.
:= names^.names^[1].filename;
* der Zeiger auf den Record
* der Zeiger auf das statische Record-Array
* und zum Schluß noch PChar zu String
[EDIT]
"drüfte"
Beim ersten
pointer. ist es eindeutig,
aber beim zweiten
pointer[ kommt es darauf an, wie es interpretiert wird.
Standardmäßig wird die Zeiger-Arithmetik aktiv sein
und dann wird der Pointer selber als Array behandelt, also ein Array auf den kompletten Subtyp
array[0..20000000] of fxp_name
, so als würden mehrere 20-Millionen-Arrays hintereinander liegen,
anstatt es hier dereferenziert und dann der Array-Zugriff "innerhalb" des Arrays passiert.
Fazit:
so
:= names.names^[1].filename;
oder so
:= names^.names^[1].filename;