【问题标题】:How to Convert IntPtr to native c++ object如何将 IntPtr 转换为本机 C++ 对象
【发布时间】:2010-11-25 13:42:02
【问题描述】:

我有在 C++/Cli 中使用的 COM dll,此 COM dll 中的方法之一返回 IntPtr 我想将其转换回本机对象指针。我怎么能做到这一点?请输入

【问题讨论】:

  • 您需要提供COM方法和“本机对象”的声明。

标签: c# .net interop c++-cli


【解决方案1】:

IntPtr 是整数类型,需要先转换成指针类型:

  IntPtr somePtr;
  ...
  Mumble* fooPtr = (Mumble*)(void*)somePtr;

或者更易读的版本:

  Mumble* fooPtr = (Mumble*)somePtr.ToPointer();

方法调用将在运行时被优化掉。

【讨论】:

    【解决方案2】:

    IntPtr 有一个ToPointer 方法,它返回一个void*。调用此方法,然后使用reintepret_cast 将此指针强制转换为正确的原生类型。

    【讨论】:

    • 我认为在这种情况下使用static_cast 应该没问题。我知道没有充分的理由 reintepret_cast 指向另一个指针类型的 void 指针。
    【解决方案3】:

    我想修改Hans Passant's answer
    IntPtr直接返回void指针..你可以很容易地转换成任何类型的原生C++指针。

    IntPtr somePtr;
    Mumble* fooPtr = (Mumble*)somePtr.ToPointer();
    

    这里.ToPointer() 将返回 void 指针,现在您可以转换为您的自定义指针类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      相关资源
      最近更新 更多