Je sais que je suis paresseux ici et que je devrais parcourir les fichiers d'en-tête pour moi-même, mais quels sont les types réels pour les paramètres LPARAM et WPARAM? S'agit-il de pointeurs ou de quatre octets? Je fais du code d'interopérabilité C # et je veux être sûr de le faire fonctionner sur les systèmes x64.
LPARAM
est un typedef pour LONG_PTR
qui est un long
(signé 32 bits) sur win32 et __int64
(signé 64 bits) sur x86_64.
WPARAM
est un typedef pour UINT_PTR
qui est un unsigned int
(32 bits non signé) sur win32 et unsigned __int64
(64 bits non signé) sur x86_64.
Ces typedefs remontent aux jours 16 bits. À l'origine, LPARAM
était un long
(signé 32 bits) et WPARAM
était un Word
(non signé 16 bits), d'où le W et L . En raison de la pratique courante de passer des pointeurs castés en tant que paramètres de message, WPARAM
a été étendu à 32 bits sur Win32 et LPARAM
et WPARAM
ont été étendus à 64 bits sur Win64.
En C #, vous devez utiliser IntPtr
pour LPARAM
et UIntPtr
pour WPARAM.
Notez que malgré le préfixe LP
, LPARAM
n'est pas un pointeur éloigné vers un ARAM
.
LPARAM fait référence à un LONG_PTR et WPARAM fait référence à un UINT_PTR
Sur x86, ils seront de 4 octets et sur x64, ils seront de 8 octets.
Ce dont vous avez besoin, mon ami, c'est http://www.pinvoke.net/
typedef UINT_PTR WPARAM;
typedef LONG_PTR LPARAM;