Italian community of Lazarus and Free Pascal
Programmazione => LCL => Topic aperto da: DragoRosso - Maggio 18, 2025, 11:27:11 am
-
Ciao a tutti.
Non avendo Lazarus riporto quando esposto nel forum internazionale ( https://forum.lazarus.freepascal.org/index.php?topic=71176.msg555248;topicseen#new ) (https://forum.lazarus.freepascal.org/index.php?topic=71176.msg555248;topicseen#new )):
- la definizione del parametro WPARAM che è definito come LONG_PTR in FPC (o come "PtrInt" in lcltype.pp) è errata. Essa deve essere "senza segno" come definito nelle api ufficiali di Windows.
WPARAM, insieme a LPARAM e LRESULT definiscono un standard unificato per il passaggio e il ritorno di "dati" in diverse api di Windows, ad esempio in "postmessage" e "sendmessage".
L'inghippo, in cui nel passato sono caduto anche io, è che LPARAM e WPARAM (entrambi usati appunto in postmessage) hanno due definizioni differenti a cui normalmente non si fà caso.
La definizione corretta di WPARAM è:
type WPARAM = PtrUInt (oppure UINT_PTR)
Tenete presente che il tipo non cambia ma la struttura (lunghezza in byte del parametro) cambia tra un applicativo a 32bit o 64bit.
In Delphi la dichiarazione è corretta, ed è riportata come "nativeuint" facendo ricordare che il dato è "nativo" della piattaforma (cioè varia in base alla piattaforma usata).
Ciao