Italian community of Lazarus and Free Pascal

Programmazione => LCL => Topic aperto da: DragoRosso - Maggio 18, 2025, 11:27:11 am

Titolo: Definizione parametro API di Windows
Inserito 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