Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LPARAM和WPARAM的定义是什么?_C#_C++_Windows - Fatal编程技术网

C# LPARAM和WPARAM的定义是什么?

C# 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上是

我知道我在这里很懒,我应该自己搜索头文件,但是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上是
无符号整数
(无符号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