社区
C#
帖子详情
请问如何在C#中捕获非托管代码中发生的错误?
xushili
2005-03-07 11:59:26
我在调用一个外部非托管的COM时,如果COM内部发生了错误将导致程序崩溃,使用try...catch也是一样,但在.Net中调试时,在输出窗口中会输出该COM中发生错误的地方。请问有什么办法能在应用程序中捕获这个出错信息,至少不让程序崩溃?谢谢!
...全文
458
17
打赏
收藏
请问如何在C#中捕获非托管代码中发生的错误?
我在调用一个外部非托管的COM时,如果COM内部发生了错误将导致程序崩溃,使用try...catch也是一样,但在.Net中调试时,在输出窗口中会输出该COM中发生错误的地方。请问有什么办法能在应用程序中捕获这个出错信息,至少不让程序崩溃?谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xxuu503
2005-03-08
打赏
举报
回复
没戏
lyrn
2005-03-08
打赏
举报
回复
try {
//...
}
catch (COMException comExc) {
// TODO: Handle COM exceptions.
}
catch (Exception e) {
// TODO: Handle exceptions.
}
xushili
2005-03-08
打赏
举报
回复
应用程序域是用来处理拖管代码的吧?
对这种非托管代码的异常可能无能为力
呆会试一下
yuhao_programer
2005-03-08
打赏
举报
回复
如果是使用标准的COM异常方法抛出的,Net应该能识别出来。
如果是运行库异常或者C++异常.Net就没办法处理了。
非托管的异常还是要在非托管环境下解决,如果能知道是什么类型的异常的话,可以给COM组件再作一层包装,在包装里面捕捉异常。可以参考SetUnhandledExceptionFilter。
另外一个思路是把程序分成两个进程或者用Net中的应用程序域,让出问题的部分不会影响整个程序
amendajing
2005-03-07
打赏
举报
回复
mark
njuptjaz
2005-03-07
打赏
举报
回复
兄弟,我遇到和你相同的问题,正在研究,我用了第三方提供的组件,组件发生一场就跳出程序,Vs无法处理非托管的异常,苦恼中,急等解决!苦啊!
xushili
2005-03-07
打赏
举报
回复
COMException和threadException都是从System.Exception这个基类继承来的,光Catch都不行,这两个肯定也不行,我也在MSDN中查了关于非托管异常的处理方法,但是没有太多的参考价值
nga96
2005-03-07
打赏
举报
回复
threadException这个异常行不?
Ivony
2005-03-07
打赏
举报
回复
应该能够catch得到啊,.NET框架能够识别大多数COM异常,而且,如果系统不认识,则会抛出System.Runtime.InteropServices.COMException异常哈。
嗯。。。。。如果把COM放在另一个线程里调用不知会怎样。。。。。
xushili
2005-03-07
打赏
举报
回复
现在修改COM时间不允许啊,只能在下个版本再考虑修改COM了,现在就是不能让应用程序崩溃
yuhao_programer
2005-03-07
打赏
举报
回复
打包调试器有什么用?调试器是用来发现错误的,而不是让错误不发生的。
能做的就是在COM中好好处理错误,不要让错误蔓延到托管环境中。
xushili
2005-03-07
打赏
举报
回复
那能不能把VS的调试环境一起打包到应用程序中,使其能够捕获非托管类型的错误呢?
yuhao_programer
2005-03-07
打赏
举报
回复
VS的调试器是托管和非托管混合编写的,所以两种类型的错误都能捕获。
纯托管代码并不能处理非托管类型的错误,chsfly并没有说错
xushili
2005-03-07
打赏
举报
回复
to chsfly(一蓑烟雨任平生):
既然在.Net调试输出窗口中能输入该COM中发生错误的地方,就说明至少.Net是可以捕获到这些错误的
chsfly
2005-03-07
打赏
举报
回复
因为Com不受.net 托管,所以不能控制其内部错误.没办法的.
xushili
2005-03-07
打赏
举报
回复
up
singleflower
2005-03-07
打赏
举报
回复
UP,没搞过,楼主你太厉害了
C#
中
如何调用API函数进行屏幕
捕获
的小例子
C#
中
如何调用API函数,使用
托管
方式调用DLL,实现屏幕捕捉
Visual
C#
2005编程实例精粹 源码
本书用200个独立实例程序重点展示Microsoft Visual
C#
2005(Microsoft.NET Framework 2.0)编程技术精华。全书摒弃语法说教,通篇贯穿实例,主要内容包括:使用ADO.NET 2.0访问数据库技巧、使用ASP.NET 2.0设计网站技巧、使用GDI+开发图形文字特效技巧、使用水晶报表专家创建报表技巧及VSTO 2005新技术等。在本书
中
,还介绍了
托管
状态下的Office自动化技术、WMI管理规范应用、XML文件读写、系统API函数调用、注册表个性化设置、文件压缩和解压缩、智能客户端部署、异常
捕获
、异步调用、ToolStrip系统控件应用、WebPart系列控件应用等大量难得一见的实用新技术,是广大程序员使用Microsoft Visual
C#
2005编程语言深入学习Microsoft.NET Framework 2.0的重要参考书。本书所有实例程序在配套光盘
中
均有源
代码
,让您所见即所得、所学即所用。 本书适合于使用Microsoft Visual Studio 2005的初、
中
级用户以step by step方式深入研习Micrososft.NET Framework 2.0高级编辑技术精华,也可作为主等院校及计算机培训学校在校学生的学习案例,对
C#
高级程序员也极具参考和收藏价值。
在C#Windows服务
中
捕获
设备事件
在
托管
Windows服务
中
处理DBT_DEVICEQUERYREMOVE
MarioMaker2OCR:从Mario Maker 2游戏提要
中
捕获
关卡信息和事件,并在本地
托管
的Web应用程序上显示
Mario Maker 2 OCR 该程序将从Mario Maker 2游戏提要
中
捕获
关卡信息和事件,并显示在本地
托管
的Web应用程序上。 这包括关卡名称,关卡
代码
,关卡创建者,死亡计数器和关卡计时器。 安装 从发行版下载 。 提取并运行Mario Maker 2 OCR.exe 使用或阅读下面的文字设置部分以使用。 例子 使用的程序示例。 屏幕截图 流叠加 如何使用 设置 如果使用的是OBS,请下载插件。 必需,因为此程序无法访问OBS已在使用的
捕获
卡。 在OBS
中
,在您的
捕获
设备上放置一个“滤镜”->“效果”,然后选择“ VirtualCam”效果。 确保按下VirtualCam上的“开始”按钮。 每次启动OBS时都需要完成此操作。 用 在此程序之前打开OBS。 在OBS
中
,验证VirtualCam已启动。 打开Mario Maker 2 OCR程序。 从下拉列表
中
选
C#
中
Try-Catch语句真的影响程序性能吗?
很多帖子都分析过Try-Catch的机制,以及其对性能的影响。 但是并没有证据证明,Try-Catch过于损耗了系统的性能,尤其是在
托管
环境下。记得园子里有位网友使用StopWatch分析过Try-Catch在不同情况下,与无Try-Catch的
代码
相比,
代码
运行的时间指标,结果并没有很大差异。 下面我来结合IL分析一下Try-Catch吧。 ● 机制分析 .Net
中
基本的异常
捕获
与处理机制是由try…catch…finally块来完成的,它们分别完成了异常的监测、
捕获
与处理工作。一个try块可以对应零个或多个catch块,可以对应零个或一个finally块。不过没有catch的try似乎
C#
110,528
社区成员
642,571
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章