如何将IntPtr转换为本机C++对象

8

我有一个 COM dll,在 C++/Cli 中使用,其中一个方法返回 IntPtr 类型。我想将其转换回本机对象指针。我该如何做?请帮忙解决。


你需要提供COM方法和“本机对象”的声明。 - logicnp
3个回答

14

IntPtr是一个整数类型,你需要先将其转换为指针类型:

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

或者更易读的版本:

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

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


8

IntPtr有一个ToPointer方法,它返回一个void*。调用此方法,然后使用reinterpret_cast将此指针转换为正确的本机类型。


我认为在这种情况下使用 static_cast 应该是可以的。我不知道将 void 指针强制转换为另一种指针类型的好理由。 - Paul Groke

3
我希望修改Hans Passant的答案
IntPtr直接返回void指针..您可以在任何类型的本地C++指针中轻松转换它。
IntPtr somePtr;
Mumble* fooPtr = (Mumble*)somePtr.ToPointer();

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接