C ++ CLI中的System.ExecutionEngineException

时间:2013-06-06 06:32:13

标签: c c++-cli native

我已经通过我的Wrapper.cpp中的IntPtr将本机指针转换为manged对象 以下是我的代码,

    _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);
     }

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

1 个答案:

答案 0 :(得分:0)

主要原因是编组工具不知道如何编组你的类型。也许你可以通过在结构前加上

来尝试结构中的嵌套结构
 [StructLayout(LayoutKind.Sequential, Pack = 1)] 

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

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

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