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

しかし、On the Line 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 に答える