LPARAM和WPARAM的定义是什么?

时间:2010-03-25 12:06:38

标签: c# c++ windows

我知道我在这里很懒,我应该为自己搜索头文件,但LPARAM和WPARAM参数的实际类型是什么?它们是指针还是四个字节的整数?我正在做一些C#interop代码,并希望确保我在x64系统上运行它。

6 个答案:

答案 0 :(得分:80)

LPARAMLONG_PTR的typedef,在win32上为long(带符号的32位),在x86_64上为__int64(带符号的64位)。

WPARAMUINT_PTR的typedef,在win32上为unsigned int(无符号32位),在x86_64上为unsigned __int64(无符号64位)。

MSDN link

答案 1 :(得分:54)

这些typedef可以追溯到16位。最初,LPARAMlong(带符号的32位),WPARAMWORD(无符号16位),因此是W and L。由于将转换指针作为消息参数传递的常见做法,WPARAM在Win32上扩展为32位,并且LPARAMWPARAM在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)

Here:

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