LPARAM和WPARAM的定义是什么?

我知道我在这里偷懒,我应该为自己拖拽头文件,但是LPARAM和WPARAM参数的实际types是什么? 他们是指针,还是四字节整数? 我正在做一些C#互操作代码,并希望确保我能在x64系统上工作。

LPARAMLONG_PTR一个typesLONG_PTR ,它是win32上的long (有符号32位)和x86_64上的__int64 (signed 64位)。

WPARAMUINT_PTR的typedef,它是win32上的unsigned int (无符号32位)和x86_64上unsigned __int64 (无符号64位)。

MSDN链接

这些typedef回到16位的日子。 最初, LPARAMlong (有符号的32位),而WPARAMWORD (无符号的16位),因此是W和L. 由于将stream水指针作为消息parameter passing的常见做法, WPARAM在Win32上扩展为32位,并且在Win64上LPARAMWPARAM都扩展为64位。

在C#中,您应该将LPARAMUIntPtr用于WPARAM。

请注意,尽pipe有LP前缀, LPARAM并不是远指向ARAM指针。

LPARAM引用LONG_PTR,WPARAM引用UINT_PTR

在x86上,它们将是4个字节,在x64上它们将是8个字节。

这里:

 typedef UINT_PTR WPARAM; typedef LONG_PTR LPARAM; 

你需要我的朋友是http://www.pinvoke.net/