是否可以在非托管DLL中抛出异常并在托管应用程序中处理它?</ em>
我的非托管C ++ DLL会在出现错误时抛出异常,并且应该在调用可执行应用程序中处理它们。
CMyFileException *x = new CMyFileException;
throw(x);
之前有效,但现在应用程序使用不同的标志(/ clr 等)编译,因为我们需要使用一些托管代码。抛出异常时,我收到一个System.ExecutionEngineException,即使在我的调用exe中使用catch(...)也似乎没有捕获到它。
我已经看到编译器选项/ clr意味着/ EHa用于异常处理,但这似乎是我现在理解的选择。
是否还有替代(编译器/链接器设置)到抛出并捕获模块(DLL / exe)边界上的异常?
感谢您的支持!马可
答案 0 :(得分:2)
还有其他事情发生。当CLR发现垃圾收集堆已损坏时,将抛出ExecutionEngineException。在托管程序中运行非托管代码时,这并不难。一个简单的缓冲区溢出就足够了。然而,找到错误并不容易。
答案 1 :(得分:0)
可以在非托管代码中抛出异常,但异常最终会被clr捕获并将其包装为SEH异常。
你可以阅读这个问题:
Best practice for translating exceptions in C++/CLI wrapper class