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

时间:2010-11-25 13:42:02

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

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

3 个答案:

答案 0 :(得分:12)

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

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

或者更易阅读的版本:

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

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

答案 1 :(得分:8)

IntPtrToPointer方法,返回void*。调用此方法,然后使用reintepret_cast将此指针强制转换为正确的本机类型。

答案 2 :(得分:2)

我想修改Hans Passant's answer
IntPtr直接返回void指针..您可以在任何类型的本机C ++指针中轻松地转换它。

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

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