我知道我在这里很懒,我应该自己搜索头文件,但是LPARAM和WPARAM参数的实际类型是什么?它们是指针,还是四字节整型?我正在做一些C# interop代码,希望确保它能在x64系统上工作。
bkhjykvo1#
LPARAM是LONG_PTR的typedef,它在win32上是long(有符号32位),在x86_64上是__int64(有符号64位)。WPARAM是UINT_PTR的typedef,UINT_PTR在win32上是unsigned int(无符号32位),在x86_64上是unsigned __int64(无符号64位)。MSDN link
LPARAM
LONG_PTR
long
__int64
WPARAM
UINT_PTR
unsigned int
unsigned __int64
2exbekwf2#
这些typedef可以追溯到16位时代。(有符号32位),而WPARAM是WORD(无符号的16位),因此W and L。由于传递转换指针作为消息参数的常见做法,WPARAM在Win32上扩展为32位,和WPARAM在Win64上都扩展到了64位。在C#中,您应该针对LPARAM使用IntPtr,针对WPARAM使用UIntPtr。注意,尽管有LP前缀,LPARAM不是指向ARAM的远指针。
WORD
IntPtr
UIntPtr
LP
ARAM
yzckvree3#
LPARAM引用LONG_PTR,而WPARAM引用UINT_PTR在x86上为4字节,在x64上为8字节。
u0njafvf4#
Here:
typedef UINT_PTR WPARAM; typedef LONG_PTR LPARAM;
zzwlnbp85#
我的朋友你需要的是http://www.pinvoke.net/
z9ju0rcb6#
c++在linux和windows 64bit测试,最简单的解决方案,我发现:
#define WPARAM long long unsigned int #define LPARAM long long int
6条答案
按热度按时间bkhjykvo1#
LPARAM
是LONG_PTR
的typedef,它在win32上是long
(有符号32位),在x86_64上是__int64
(有符号64位)。WPARAM
是UINT_PTR
的typedef,UINT_PTR
在win32上是unsigned int
(无符号32位),在x86_64上是unsigned __int64
(无符号64位)。MSDN link
2exbekwf2#
这些typedef可以追溯到16位时代。(有符号32位),而
WPARAM
是WORD
(无符号的16位),因此W and L。由于传递转换指针作为消息参数的常见做法,WPARAM
在Win32上扩展为32位,和WPARAM
在Win64上都扩展到了64位。在C#中,您应该针对
LPARAM
使用IntPtr
,针对WPARAM使用UIntPtr
。注意,尽管有
LP
前缀,LPARAM
不是指向ARAM
的远指针。yzckvree3#
LPARAM引用LONG_PTR,而WPARAM引用UINT_PTR
在x86上为4字节,在x64上为8字节。
u0njafvf4#
Here:
zzwlnbp85#
我的朋友你需要的是http://www.pinvoke.net/
z9ju0rcb6#
c++在linux和windows 64bit测试,最简单的解决方案,我发现: