c# - valid - ¿Cuáles son las definiciones para LPARAM y WPARAM?
tag c# (5)
Estos typedefs se remontan a los días de 16 bits. Originalmente, LPARAM
era un long
(con signo de 32 bits) y WPARAM
era una WORD
(sin signo de 16 bits), por lo tanto, la W y la L. Debido a la práctica común de pasar punteros WPARAM
como parámetros de mensaje, WPARAM
se expandió a 32 bits en Win32, y tanto LPARAM
como WPARAM
se expandieron a 64 bits en Win64.
En C #, debe usar IntPtr
para LPARAM
y UIntPtr
para WPARAM.
Tenga en cuenta que a pesar del prefijo LP
, LPARAM
no es un puntero lejano a un ARAM
.
Sé que estoy siendo perezoso aquí y debo rastrear los archivos de encabezado por mí mismo, pero ¿cuáles son los tipos reales para los parámetros LPARAM y WPARAM? ¿Son punteros, o cuatro bytes? Estoy haciendo un código de interoperabilidad de C # y quiero estar seguro de que funciona en sistemas x64.
LPARAM se refiere a un LONG_PTR y WPARAM se refiere a un UINT_PTR
En x86 serán 4 bytes y en x64 serán 8 bytes.
Lo que necesitas mi amigo es http://www.pinvoke.net/
typedef UINT_PTR WPARAM;
typedef LONG_PTR LPARAM;
LPARAM
es un typedef para LONG_PTR
que es un long
(con signo de 32 bits) en win32 y __int64
(con signo de 64 bits) en x86_64.
WPARAM
es un typedef para UINT_PTR
que es un unsigned int
(sin signo de 32 bits) en win32 y unsigned __int64
(sin signo de 64 bits) en x86_64.