2013-06-05 46 views
0

我需要将非托管指针转换为托管对象。 下面是代码将本地指针强制转换为托管对象

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 ::减法':不能从转换 参数1 'UnmanagedSubtraction *' 来 'AlgebraCSharp :: SubtractComputation ^'

如果您有任何与此相关的解决方案,请让我知道。

回答

1

您不能强制转换:您必须转换(将相关内容复制到托管对象)或换行(将一个对象作为另一个的包装)。

+0

Thanks for the Reply.You are Right.We can not convert native pointer into managed object directly.First我们必须将本地指针转换为IntPtr,然后将该IntPtr转换为ManagedObject。 – user2372247

1

我们不能直接将原生指针转换为托管对象。 首先,我们必须将本地指针转换为IntPtr。 ,然后将IntPtr转换为托管对象。