【问题标题】:cast the native pointer to managed object将本机指针强制转换为托管对象
【发布时间】:2013-06-06 13:52:56
【问题描述】:

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

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 ^'

如果您有任何与此相关的解决方案,请告诉我。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。您说得对。我们不能直接将本机指针转换为托管对象。首先我们必须将本机指针转换为 IntPtr,然后将 IntPtr 转换为 ManagedObject。
    【解决方案2】:

    我们不能直接将本机指针转换为托管对象。 首先,我们必须将 Native Pointer 转换为 IntPtr。 然后 IntPtr 到托管对象。

    【讨论】:

      猜你喜欢
      • 2017-08-16
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      相关资源
      最近更新 更多