windows LPARAM和WPARAM的定义是什么?

3yhwsihp  于 2022-11-18  发布在  Windows
关注(0)|答案(6)|浏览(152)

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

bkhjykvo

bkhjykvo1#

LPARAMLONG_PTR的typedef,它在win32上是long(有符号32位),在x86_64上是__int64(有符号64位)。
WPARAMUINT_PTR的typedef,UINT_PTR在win32上是unsigned int(无符号32位),在x86_64上是unsigned __int64(无符号64位)。
MSDN link

2exbekwf

2exbekwf2#

这些typedef可以追溯到16位时代。(有符号32位),而WPARAMWORD(无符号的16位),因此W and L。由于传递转换指针作为消息参数的常见做法,WPARAM在Win32上扩展为32位,和WPARAM在Win64上都扩展到了64位。
在C#中,您应该针对LPARAM使用IntPtr,针对WPARAM使用UIntPtr
注意,尽管有LP前缀,LPARAM不是指向ARAM的远指针。

yzckvree

yzckvree3#

LPARAM引用LONG_PTR,而WPARAM引用UINT_PTR
在x86上为4字节,在x64上为8字节。

u0njafvf

u0njafvf4#

Here:

typedef UINT_PTR WPARAM;
typedef LONG_PTR LPARAM;
z9ju0rcb

z9ju0rcb6#

c++在linux和windows 64bit测试,最简单的解决方案,我发现:

#define WPARAM long long unsigned int
#define LPARAM long long int

相关问题