如何在混合应用程序中进行异常处理? (使用非托管DLL的托管应用程序)

时间:2010-01-08 10:29:17

标签: .net exception-handling clr managed managed-c++

是否可以在非托管DLL中抛出异常并在托管应用程序中处理它?<​​/ em>

我的非托管C ++ DLL会在出现错误时抛出异常,并且应该在调用可执行应用程序中处理它们

CMyFileException *x = new CMyFileException;
throw(x);

之前有效,但现在应用程序使用不同的标志(/ clr 等)编译,因为我们需要使用一些托管代码。抛出异常时,我收到一个System.ExecutionEngineException,即使在我的调用exe中使用catch(...)也似乎没有捕获到它。

我已经看到编译器选项/ clr意味着/ EHa用于异常处理,但这似乎是我现在理解的选择。

是否还有替代(编译器/链接器设置)抛出并捕获模块(DLL / exe)边界上的异常?

感谢您的支持!马可

2 个答案:

答案 0 :(得分:2)

还有其他事情发生。当CLR发现垃圾收集堆已损坏时,将抛出ExecutionEngineException。在托管程序中运行非托管代码时,这并不难。一个简单的缓冲区溢出就足够了。然而,找到错误并不容易。

答案 1 :(得分:0)

可以在非托管代码中抛出异常,但异常最终会被clr捕获并将其包装为SEH异常。

你可以阅读这个问题:

Best practice for translating exceptions in C++/CLI wrapper class