wennerer hat geschrieben: Do 20. Feb 2025, 17:25
Hallo Zvoni,
also IntResource steht für Interne und nicht für integer. Da war ich wohl blind

!
Dann verstehe ich auch die Funktion:
Code: Alles auswählen
function Is_IntResource(aStr : pchar) : boolean; {$ifdef SYSTEMINLINE}inline;{$endif}
begin
Result:=((PtrUInt(aStr) shr 16)=0);
end;
Aller Speicher unter 2hoch16 (also 1 Word) ist für interne Resourcen vorgesehen.
In der Referenz zu PtrUInt steht:
PtrUInt is an unsigned integer type which has always the same size as a pointer. When using integers which will be cast to pointers and vice versa, use this type, never the regular Cardinal type.
Mein Englisch ist jetzt nicht das Beste aber so wie ich das lese müsste PtrUInt doch nicht die Adresse sondern die Größe liefern oder wie muss ich das verstehen?
Kapiere ich nicht so wirklich.
Leider erzeugen alle TypCast's die ich probiert habe eine Speicherzugriffsverletzung. Ist es überhaupt möglich auf diesen Speicherbereich mit Pascal zuzugreifen?
Viele Grüße
Bernd
Ptruint hat immer die gleiche Größe wie ein Zeiger, abhängig von der Platform.
Auf 64 bit OS ist es 64Bit gross, auf 32bit…..
Und das ist eben ein Typecast von Pchar, was ja auch ein zeiger ist.
Wenn du einen Pchar an writeln gibst, dereferenziert writeln diesen zeiger.
Mit dem cast kannst du aber die adresse mit writeln ausgeben, was eben mit Pointer nicht geht
Und wie kommst du auf 2 hoch 16?
Müsste doch 2 hoch 4 sein
EDIT: Schmarrn. Hast recht
Shr 16 heisst 16 bits nach rechts