如何将 IntPtr 转换为本机 C++ 对象
Posted
技术标签:
【中文标题】如何将 IntPtr 转换为本机 C++ 对象【英文标题】:How to Convert IntPtr to native c++ object 【发布时间】:2010-11-25 13:42:02 【问题描述】:我有在 C++/Cli 中使用的 COM dll,此 COM dll 中的方法之一返回 IntPtr 我想将其转换回本机对象指针。我怎么能做到这一点?请输入
【问题讨论】:
您需要提供COM方法和“本机对象”的声明。 【参考方案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 指针,现在您可以转换为您的自定义指针类型。
【讨论】:
以上是关于如何将 IntPtr 转换为本机 C++ 对象的主要内容,如果未能解决你的问题,请参考以下文章