LPARAM和WPARAM的定义是什么?

Mar*_*ath 57 c# c++ windows

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

CB *_*ley 82

LPARAM是一个typedef,在win32上LONG_PTRlong(带符号的32位),__int64在x86_64上是(带符号的64位).

WPARAM是一个typedef,在win32上UINT_PTRunsigned int(无符号32位),unsigned __int64在x86_64上是(无符号64位).

MSDN链接

  • @Charles Bailey:也许我误解了您的意思,但是当您说:“__int64(已签名 64 位)在 x86 上”时,您的意思是“在 x86-64 上”或 win64 之类的吗?我认为 x86 是 32 位的。 (2认同)
  • @User:是的,应该说x86_64,这就是微软现在引用amd64的方式。 (2认同)

dan*_*n04 55

这些typedef可以追溯到16位.最初,LPARAM是一个long(带符号的32位)和WPARAMWORD(无符号16位),因此W和L.由于通过铸造指针作为消息参数的惯例,WPARAM被扩展为32位的Win32,都LPARAMWPARAM扩大到Win64上64位.

在C#中,您应该使用IntPtrfor LPARAMUIntPtrfor WPARAM.

请注意,尽管有LP前缀,但LPARAM不是指针的远指针ARAM.


Bri*_*ndy 5

LPARAM指的是LONG_PTR,WPARAM指的是UINT_PTR

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


jpa*_*cek 5

这里:

typedef UINT_PTR WPARAM;
typedef LONG_PTR LPARAM;
Run Code Online (Sandbox Code Playgroud)