LPARAM和WPARAM的定义是什么?
我知道我在这里偷懒,我应该为自己拖拽头文件,但是LPARAM和WPARAM参数的实际types是什么? 他们是指针,还是四字节整数? 我正在做一些C#互操作代码,并希望确保我能在x64系统上工作。
LPARAM
是LONG_PTR
一个typesLONG_PTR
,它是win32上的long
(有符号32位)和x86_64上的__int64
(signed 64位)。
WPARAM
是UINT_PTR
的typedef,它是win32上的unsigned int
(无符号32位)和x86_64上unsigned __int64
(无符号64位)。
MSDN链接
这些typedef回到16位的日子。 最初, LPARAM
是long
(有符号的32位),而WPARAM
是WORD
(无符号的16位),因此是W和L. 由于将stream水指针作为消息parameter passing的常见做法, WPARAM
在Win32上扩展为32位,并且在Win64上LPARAM
和WPARAM
都扩展为64位。
在C#中,您应该将LPARAM
和UIntPtr
用于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/