C# LPARAM和WPARAM的定义是什么?
我知道我在这里很懒,我应该自己搜索头文件,但是LPARAM和WPARAM参数的实际类型是什么?它们是指针还是四字节整数?我正在编写一些C#互操作代码,希望确保它能在x64系统上运行。LPARAM表示长PTR,WPARAM表示UINT PTRC# LPARAM和WPARAM的定义是什么?,c#,c++,windows,C#,C++,Windows,我知道我在这里很懒,我应该自己搜索头文件,但是LPARAM和WPARAM参数的实际类型是什么?它们是指针还是四字节整数?我正在编写一些C#互操作代码,希望确保它能在x64系统上运行。LPARAM表示长PTR,WPARAM表示UINT PTR 在x86上为4字节,在x64上为8字节。LPARAM是win32上为LONG\u PTR的类型定义,在x86\u 64上为LONG(签名32位) WPARAM是UINT\u PTR的类型定义,在win32上是无符号整数(无符号32位),在x86\u 64上是
在x86上为4字节,在x64上为8字节。
LPARAM
是win32上为LONG\u PTR
的类型定义,在x86\u 64上为LONG
(签名32位)
WPARAM
是UINT\u PTR
的类型定义,在win32上是无符号整数
(无符号32位),在x86\u 64上是无符号整数
(无符号64位)
我的朋友,你需要的是这些typedef可以追溯到16位时代。最初,
LPARAM
是一个long
(有符号32位)而WPARAM
是一个字(无符号16位),因此。由于将浇铸指针作为消息参数传递的常见做法,WPARAM
在Win32上扩展为32位,而LPARAM
和WPARAM
在Win32上扩展为64位
在C#中,您应该对LPARAM
使用IntPtr
,对WPARAM使用UIntPtr
请注意,尽管在linux和windows 64位测试中使用了LP
前缀,LPARAM
并不是指向ARAM
c++的远指针,但我发现的最简单的解决方案是:
#define WPARAM long long unsigned int
#define LPARAM long long int
如果我有一个VisualC++,我可以做C++的开发。如果你不使用C++ IDE,找到这些东西的实际定义是很费时的。我只需要手动跟踪几个typedef,就可以找到HACMDRIVERID末尾的内容。如果MSDN文档被正确地超链接,它会给我带来很多麻烦。@马克:那么为什么这个问题被标记为C++?可能是个懒惰的问题…另一方面,在谷歌搜索wparam时,它是最重要的答案,所以你不是唯一一个想要快速答案的人,现在每个人都得到了!anon不理解StackOverflow的意义,并且清楚地意识到他/他是一个无知的人,因此没有勇气为他/她的攻击性评论命名。StackOverflow不是“懒惰”,而是记录人们可能不理解的东西。下面有比拖网标题提供的有用信息多得多的信息。任何对这个问题投了否决票的人都应该离开这个网站,转而花时间在蹩脚的编程论坛上添加最优秀的RTFM答案。@JesonPark:这个问题被标记为c#。是的,这是一个有用的网站,尽管质量参差不齐conversions@Charles贝利:也许我误解了你,但当你说:“\uuu int64(签名64位)在x86上”你是说“在x86-64上”还是win64或其他什么?X86是32位。@用户:是的,它应该是微软现在引用AMD64的X8664。请注意,C++中的描述是指<代码>长< /C>。在C#中,long
是有符号的64位,编译为32位时也是如此。
#define WPARAM long long unsigned int
#define LPARAM long long int