【发布时间】:2009-05-27 07:03:53
【问题描述】:
我有一个 C++ DLL,代码如下:
LogMessage( "Hello world" );
try {
throw new int;
} catch( int* e ) {
LogMessage( "Caught exception" );
delete e;
}
LogMessage( "Done" );
此 DLL 由某个第三方应用程序加载并调用上述代码。问题是只有第一个 LogMessage 被调用 - 即使有一个异常处理程序,控制流也会转移到未知数。
我看到了这一点,无法确定这是要调查的一些晦涩的错误还是只是消费者应用程序的邪恶力量。
消费者应用程序真的可以覆盖 DLL 中的 C++ 异常处理吗?
编辑:在考虑了答案中列出的所有要检查的事项后,问题得到了解决。在实际代码中,它不仅仅是throw,还有一个用于抛出异常的特殊函数,它在调试版本中调用了MessageBoxW() Win32 调用。并且消费者应用程序在显示消息框(它是一个 NT 服务)时遇到了麻烦,并且有效地挂断了。所以无论如何处理 C++ 异常都不是问题。
【问题讨论】:
标签: c++ windows exception service messagebox