【发布时间】:2010-11-25 13:42:02
【问题描述】:
我有在 C++/Cli 中使用的 COM dll,此 COM dll 中的方法之一返回 IntPtr 我想将其转换回本机对象指针。我怎么能做到这一点?请输入
【问题讨论】:
-
您需要提供COM方法和“本机对象”的声明。
我有在 C++/Cli 中使用的 COM dll,此 COM dll 中的方法之一返回 IntPtr 我想将其转换回本机对象指针。我怎么能做到这一点?请输入
【问题讨论】:
IntPtr 是整数类型,需要先转换成指针类型:
IntPtr somePtr;
...
Mumble* fooPtr = (Mumble*)(void*)somePtr;
或者更易读的版本:
Mumble* fooPtr = (Mumble*)somePtr.ToPointer();
方法调用将在运行时被优化掉。
【讨论】:
IntPtr 有一个ToPointer 方法,它返回一个void*。调用此方法,然后使用reintepret_cast 将此指针强制转换为正确的原生类型。
【讨论】:
static_cast 应该没问题。我知道没有充分的理由 reintepret_cast 指向另一个指针类型的 void 指针。
我想修改Hans Passant's answer,IntPtr直接返回void指针..你可以很容易地转换成任何类型的原生C++指针。
IntPtr somePtr;
Mumble* fooPtr = (Mumble*)somePtr.ToPointer();
这里.ToPointer() 将返回 void 指针,现在您可以转换为您的自定义指针类型。
【讨论】: