visual valid tag remarks example comment c# c++ windows

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.



Here:

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.

Enlace MSDN