none
win64位系统开发64位程序,有没有办法通过long传输指针地址 RRS feed

  • 问题

  • 如题,由于底层API的原因,只能通过一个long去传数据,就想传一个指针过去,但是我试了通过强转传前面半截地址不一样。求破。
    2017年12月13日 3:53

答案

  • Hi ubosm,

    感谢在MSDN论坛发帖。

    >>如题,由于底层API的原因,只能通过一个long去传数据,就想传一个指针过去,但是我试了通过强转传前面半截地址不一样。求破。

    int和long在64位Windows操作系统上是32位值。 对于您打算为64位平台编译的程序,您应该小心不要将指针指定给32位变量。 指针在64位平台上是64位,如果将其指定给32位变量,则会截断指针值。

    对于这种情况,建议你使用reinterpret_cast 操作符来进行转换。它允许任何指针转换为任何其他指针类型。 也允许任何整数类型转换成任何指针类型。

    希望对你有所帮助。

    Best Regards,

    Baron Bi


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 ubosm 2017年12月15日 9:38
    2017年12月13日 7:12

全部回复

  • Hi ubosm,

    感谢在MSDN论坛发帖。

    >>如题,由于底层API的原因,只能通过一个long去传数据,就想传一个指针过去,但是我试了通过强转传前面半截地址不一样。求破。

    int和long在64位Windows操作系统上是32位值。 对于您打算为64位平台编译的程序,您应该小心不要将指针指定给32位变量。 指针在64位平台上是64位,如果将其指定给32位变量,则会截断指针值。

    对于这种情况,建议你使用reinterpret_cast 操作符来进行转换。它允许任何指针转换为任何其他指针类型。 也允许任何整数类型转换成任何指针类型。

    希望对你有所帮助。

    Best Regards,

    Baron Bi


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 ubosm 2017年12月15日 9:38
    2017年12月13日 7:12
  • 感谢你的答复,确实是会产生截断,目前我采用的方法就是用一个全局的map去存储各个对象的指针。
    2017年12月15日 9:41
  • 尽早更新你的API,不要用long这样依赖于平台的类型。

    ADO以前接口里面有ADO_LONG,结果64位Office暴露了这个接口的问题之后不得不发了个KB983246把接口改为ADO_LONGPTR,一大堆旧程序在迁移过程中挂掉。



    Visual C++ MVP

    2018年1月10日 17:52
    版主