2010-01-08 110 views
1

是否有可能在非托管DLL中引发异常并在托管应用程序中处理它?如何在混合应用程序中执行异常处理? (托管应用程序使用非托管DLL)

我的非托管C++ DLL引发异常在错误的情况下,他们应该是在调用可执行应用处理。

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

这以前工作,但现在的应用程序是标志不同(/ CLR等)的原因,我们需要使用一些托管代码编译。当抛出异常时,我收到一个System.ExecutionEngineException,这个异常在我的调用exe文件中甚至没有捕获(...)。

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

会不会有其他任何替代(编译/连接设置)抛出和捕获异常在模块(DLL/EXE)的边界呢?

感谢您的支持! Marco

回答

2

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

+0

终于找到了它 - 一个指向bitshifts位图颜色的指针操作 - 来自'92和16bit时代的MSDN代码示例。 *叹了口气*导致了一个根本没有崩溃应用程序的问题,但是当抛出异常时(甚至抛出;没有参数),一直以来都会造成问题**感谢您的支持!** – marco4net 2010-01-12 10:07:07

相关问题