0

我已经通过 Wrapper.cpp 中的 IntPtr 将可能本机指针转换为被管理对象下面是我的代码,

    _declspec(dllexport)int UnmanagedAlgebraComputation::SubtractMultiplyWrapper(UnmanagedSubtraction *unmanagedSubtraction)
     {
        AlgebraCSharp::AlgebraComputation^ obj= AlgebraCSharp::AlgebraComputation::GetObject;
        unmanagedSubtraction=new UnmanagedSubtraction();
        System::IntPtr ip=System::IntPtr(unmanagedSubtraction);
        Object^ handle=Marshal::GetObjectForIUnknown(ip) ; 
        return obj->Subtraction((AlgebraCSharp::SubtractComputation^)handle);
     }

但是在线 Object^ handle=Marshal::GetObjectForIUnknown(ip) ; 它将异常抛出为'System.ExecutionEngineException'。请让我知道与此相关的解决方案。

4

1 回答 1

0

主要原因是编组工具不知道如何编组您的类型。所以您可以通过将结构作为前缀来尝试结构中的嵌套结构

 [StructLayout(LayoutKind.Sequential, Pack = 1)] 

或为嵌套数组添加前缀,例如

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]

您可以查看此链接http://www1.cs.columbia.edu/~lok/csharp/refdocs/System/types/ExecutionEngineException.html

于 2013-06-06T07:13:58.627 回答