我已经通过我的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'。 请让我知道与此相关的解决方案。
答案 0 :(得分:0)
主要原因是编组工具不知道如何编组你的类型。也许你可以通过在结构前加上
来尝试结构中的嵌套结构 [StructLayout(LayoutKind.Sequential, Pack = 1)]
或 为嵌套数组添加前缀,如
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]
您可以查看此链接http://www1.cs.columbia.edu/~lok/csharp/refdocs/System/types/ExecutionEngineException.html