将本机指针强制转换为托管对象

时间:2013-06-05 11:10:10

标签: c++ c++-cli native

我需要将非托管指针转换为托管对象。 以下是代码

Wrapper.cpp

 _declspec(dllexport) int UnmanagedAlgebraComputation::SubtractMultiplyWrapper(UnmanagedSubtraction *unmanagedSubtraction)
{
     AlgebraCSharp::AlgebraComputation^ obj= AlgebraCSharp::AlgebraComputation::GetObject;
     return obj->Subtraction(unmanagedSubtraction);
 }

此处UnmanagedSubtractionUnmanagedAlgebraComputation Wrapper.h 文件中的类。

SubtractMultiplyWrapper(UnmanagedSubtraction *unmanagedSubtraction)是我的 wrapper.h 文件中的方法,该文件在我的Wrapper.cpp文件中实现。

问题是我想将托管对象传递给obj->Subtraction(unmanagedSubtraction),但unmanagedSubtraction是我的本机C指针。

它将错误抛出为

  

'AlgebraCSharp :: AlgebraComputation :: Subtraction':无法转换   参数1从'UnmanagedSubtraction *'到   'AlgebraCSharp :: SubtractComputation ^'

如果您有任何相关解决方案,请与我们联系。

2 个答案:

答案 0 :(得分:1)

你无法强制转换:你必须转换(将相关内容复制到托管对象)或换行(让一个对象成为另一个对象的包装器)。

答案 1 :(得分:1)

我们无法直接将Native Pointer转换为Managed object。 首先,我们必须将Native Pointer转换为IntPtr。 然后IntPtr到托管对象。