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.