我在调用一个外部非托管的COM时,如果COM内部发生了错误将导致程序崩溃,使用try...catch也是一样,但在.Net中调试时,在输出窗口中会输出该COM中发生错误的地方。请问有什么办法能在应用程序中捕获这个出错信息,至少不让程序崩溃?谢谢!
解决方案 »
- C# winfrom 菜单太多一行放不开
- C#调用C++dll含有指针的问题
- dataGridView单元格背景的设置
- 如何把文件上传到另外一台服务器
- 改变DataTable里Column里的名称
- 求助:请问asp里面产生的session如何在aspx页面里捕获?
- 关于LISTVIEW的问题
- 将DataSet中的数据写入xml文件的问题?
- 有人有过D版的封面是“Visual C# 8.0”(单张)的盘吗?如何安装呀?
- 关于创建实例的问题。。。。在线等候
- C#的全局绘图设备上下文
- 已知Dataset中包含一个名为t1的DataTable,如何把它改名(Books),使可以用ds.Tables["Books"]访问该表?
既然在.Net调试输出窗口中能输入该COM中发生错误的地方,就说明至少.Net是可以捕获到这些错误的
纯托管代码并不能处理非托管类型的错误,chsfly并没有说错
能做的就是在COM中好好处理错误,不要让错误蔓延到托管环境中。
如果是运行库异常或者C++异常.Net就没办法处理了。
非托管的异常还是要在非托管环境下解决,如果能知道是什么类型的异常的话,可以给COM组件再作一层包装,在包装里面捕捉异常。可以参考SetUnhandledExceptionFilter。
另外一个思路是把程序分成两个进程或者用Net中的应用程序域,让出问题的部分不会影响整个程序
//...
}
catch (COMException comExc) {
// TODO: Handle COM exceptions.
}
catch (Exception e) {
// TODO: Handle exceptions.
}