web-dev-qa-db-fra.com

Quelles sont les définitions de LPARAM et WPARAM?

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.

57
Mark Heath

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.

lien MSDN

82
CB Bailey

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.

55
dan04

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.

5
Brian R. Bondy

Ce dont vous avez besoin, mon ami, c'est http://www.pinvoke.net/

4
SerialSeb

Ici:

typedef UINT_PTR WPARAM;
typedef LONG_PTR LPARAM;
4
jpalecek