我有一个 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++ 异常都不是问题。