我知道我在这里很懒,我应该为自己搜索头文件,但LPARAM和WPARAM参数的实际类型是什么?它们是指针还是四个字节的整数?我正在做一些C#interop代码,并希望确保我在x64系统上运行它。
答案 0 :(得分:80)
LPARAM
是LONG_PTR
的typedef,在win32上为long
(带符号的32位),在x86_64上为__int64
(带符号的64位)。
WPARAM
是UINT_PTR
的typedef,在win32上为unsigned int
(无符号32位),在x86_64上为unsigned __int64
(无符号64位)。
答案 1 :(得分:54)
这些typedef可以追溯到16位。最初,LPARAM
是long
(带符号的32位),WPARAM
是WORD
(无符号16位),因此是W and L。由于将转换指针作为消息参数传递的常见做法,WPARAM
在Win32上扩展为32位,并且LPARAM
和WPARAM
在Win64上扩展为64位。
在C#中,您应该将IntPtr
用于LPARAM
,将UIntPtr
用于WPARAM。
请注意,尽管LP
前缀LPARAM
,但ARAM
并不是指向{{1}}的指针。
答案 2 :(得分:5)
LPARAM是指LONG_PTR,WPARAM是指UINT_PTR
在x86上,它们将是4个字节,在x64上,它们将是8个字节。
答案 3 :(得分:4)
typedef UINT_PTR WPARAM;
typedef LONG_PTR LPARAM;
答案 4 :(得分:3)
你需要我的朋友http://www.pinvoke.net/
答案 5 :(得分:0)
在Linux和Windows 64位上的c ++经过测试,这是我找到的最简单的解决方案:
#define WPARAM long long unsigned int
#define LPARAM long long int