![]() |
Prüfen, ob PChar einen Ordinalwert enthält?
Hallo zusammen,
gibt es eine Standard-Vorhergehensweise, um zu prüfen, ob ein P(Ansi)Char Wert als Ordinalwert gebraucht wird? GetProcAddress erlaubt ja beispielsweise PAnsiChar Werte in dieser Form zu [strike]miss[/strike]ge-brauchen. Auch Resourcen können auf diesem Wege adressiert werden. Folgendes habe ich öfters mal gefunden:
Delphi-Quellcode:
Hier wird impliziert, dass der PChar nur bei Verwendung von mehr als 16 Bits einen validen Pointer enthalten kann.
IsOrdinal := (NativeUInt(PCharValue) shr 16) = 0;
Kann man das so nehmen, oder gibt es hier eventuell irgendeine Art von Vorgabe von MS selbst? Viele Grüße Zacherl |
AW: Prüfen, ob PChar einen Ordinalwert enthält?
Warum sollte man denn einen Ordinalwert darin speichern?
Aber ja, das ist dokumentiert. Du kannst den niedrigsten Wert mit GetSystemInfo auslesen: ![]() Damit erhältst du unter anderem lpMinimumApplicationAddress. Und das ist normalerweise zumindest bei 32 Bit Systemen $00010000, woher auch der von dir genannte Test rührt. Du könntest auch den Systemwert abfragen und schauen, ob dein Wert niedriger ist. |
AW: Prüfen, ob PChar einen Ordinalwert enthält?
Wunderbar danke dir! Auf die Idee lpMinimumApplicationAddress aus der SystemInfo Struct zu prüfen, bin ich noch gar nicht gekommen.
Ich selbst will keinen Ordinalwert als PChar speichern, muss aber überprüfen, ob ich an diversen Stellen Ordinalwerte übergeben bekomme. Im EnumResources Callback war das beispielsweise notwendig. |
AW: Prüfen, ob PChar einen Ordinalwert enthält?
Wenn nicht etwas sehr verrücktes abgeht, sollte es niemals valide Pointer unter 2^12 = 4096 geben. Die erste Page wird vom OS vernünftigerweise auf invalid gesetzt, damit man einen Pagefault erhält, wenn man einen Nullpointer dereferenziert. Hurra für Null-Pointer-Exceptions :mrgreen:
Zitat:
![]() Da es ein Macro ist, wird sich der Wert vermutlich auch nicht so schnell ändern. |
AW: Prüfen, ob PChar einen Ordinalwert enthält?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz