【问题标题】:What are the definitions for LPARAM and WPARAM?LPARAM 和 WPARAM 的定义是什么?
【发布时间】:2011-01-31 16:43:59
【问题描述】:

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

【问题讨论】:

  • @John - 如果我有 Visual C++ IDE,我可以,但我正在做 C# 开发。如果您不使用 C++ IDE,那么查找这些事物的实际定义会非常耗时。我只需要手动跟踪几个 typedef 来找出 HACMDRIVEID 末尾的内容。如果 MSDN 文档有正确的超链接,我会省去很多麻烦。
  • @Mark:那为什么这个问题标为C++?
  • 可能是一个懒惰的问题...另一方面,它是谷歌搜索 wparam 时的最佳答案,所以你不是唯一一个想要快速答案的人,现在每个人都明白了!
  • anon 不明白 StackOverflow 的意义,并且清楚地意识到他/她是一个无知的人,因此没有勇气为他/她的冒犯性评论命名。 StackOverflow 不是关于“懒惰”,而是关于记录人们可能不理解的事情。下面有比拖网标题所能提供的更有用的信息。任何对这个问题投反对票的人都应该离开这个网站,而是花时间在蹩脚的编程论坛上添加最优秀的 RTFM 答案。
  • @JesonPark:这个问题被标记为 c#。

标签: c# c++ windows


【解决方案1】:

LPARAMLONG_PTR 的 typedef,在 win32 上是 long(带符号的 32 位),在 x86_64 上是 __int64(带符号的 64 位)。

WPARAMUINT_PTR 的 typedef,在 win32 上是 unsigned int(无符号 32 位),在 x86_64 上是 unsigned __int64(无符号 64 位)。

MSDN link

【讨论】:

  • @Charles Bailey:也许我误解了你,但是当你说:“x86 上的 __int64(签名 64 位)”时,您的意思是“在 x86-64 上”或 win64 上还是什么?我认为 x86 是 32 位的。
  • @User:是的,应该是 x86_64,这就是微软现在对 amd64 的称呼。
  • 请注意,该描述指的是 C++ 中的long。在 C# 中,long 是有符号的 64 位,编译为 32 位时也是如此。
【解决方案2】:

这些 typedef 可以追溯到 16 位时代。最初,LPARAMlong(有符号 32 位),WPARAMWORD(无符号 16 位),因此是 W and L。由于将转换指针作为消息参数传递的常见做法,WPARAM 在 Win32 上扩展为 32 位,LPARAMWPARAM 在 Win64 上扩展为 64 位。

在 C# 中,您应该将 IntPtr 用于 LPARAM,将 UIntPtr 用于 WPARAM。

请注意,尽管有 LP 前缀,LPARAM 并不是指向 ARAM 的远指针。

【讨论】:

    【解决方案3】:

    LPARAM 指的是 LONG_PTR,WPARAM 指的是 UINT_PTR

    在 x86 上为 4 个字节,在 x64 上为 8 个字节。

    【讨论】:

      【解决方案4】:

      Here:

      typedef UINT_PTR WPARAM;
      typedef LONG_PTR LPARAM;
      

      【讨论】:

        【解决方案5】:

        你需要我的朋友是http://www.pinvoke.net/

        【讨论】:

        • 是的,它是一个有用的网站,虽然互操作质量参差不齐
        【解决方案6】:

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

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

        【讨论】:

          猜你喜欢
          • 2013-07-24
          • 1970-01-01
          • 1970-01-01
          • 2012-06-01
          • 2016-10-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多