2013-06-06 52 views
0

我在Wrapper.cpp 下面是我的代碼經由轉換的IntPtr可能天然指針manged對象,System.ExecutionEngineException在C++ CLI

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

但在線條對象^手柄=元帥: :GetObjectForIUnknown(ip);它拋出的異常爲'System.ExecutionEngineException'。 請讓我知道與此相關的解決方案。

+0

好了,這是不應該發生的,叫聲也像CLR錯誤。但是,如果使用* new *運算符創建非託管對象,則「ip」實際上是有效的IUnknown COM接口指針的機率非常接近零。 COM對象必須使用CoCreateInstance()創建。所以只是不要使用GetObjectForIUnknown()來避免崩潰。 –

回答