我有一个C++/CLI的“包装库”,用于与一个未经管理的第三方库通信,以使该功能在我的.NET项目中可用。一些未经管理的库函数会抛出继承自std::exception
的异常。我希望在.NET空间中将它们重新抛出为有意义的异常。
目前,我对每个未经管理的调用都这样做:
try {
myThirdPartyObject -> doUnmanagedStuff();
} catch(std::exception e) {
throw gcnew InvalidOperationException(gcnew String(e.what()));
}
然而,这种方法既没有保留调用栈,也没有保留原始异常。如果我只是让异常继续抛出,我只能得到一个带有消息“An external component has thrown an exception”的SEHException
异常。
这种情况是否可能发生?如果是,应该如何处理?
catch (std::exception& e)
)。 - Stephancatch (const std::exception& e)
)。 - Sebacotecatch
块中得到const异常。并且在重新抛出之前,您无法调用任何非const函数或修改异常。 - Stephan