C#写的exe,调用了C++的dll,C++一有异常,进程就退出。如何把c#程序做的健壮些?高手请进~~~

hailercyh 2012-03-12 02:18:33
C#写的exe,调用了C++的dll,C++一有异常,进程就退出。如何把c#程序做的健壮些?

我们不能保证底层C++没有异常,一有异常,c#程序就崩溃退出了,能否不崩溃,这样用户体验很不好。
...全文
435 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
hailercyh 2012-03-13
  • 打赏
  • 举报
回复
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
和Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException); 可以的,谢谢各位了,结贴。
hailercyh 2012-03-12
  • 打赏
  • 举报
回复
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
和Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);试过都不行的。不知道你说的是否同一个方法。

[Quote=引用 18 楼 jinyuttt 的回复:]

1.可以建立AppDomain加载。2.建立一个应用程序的错误抓取。也就是在主线程中抓取。pplication.ThreadException 用它。靠,没有饭吃责怪锅。
[/Quote]
jason成都 2012-03-12
  • 打赏
  • 举报
回复
1.可以建立AppDomain加载。2.建立一个应用程序的错误抓取。也就是在主线程中抓取。pplication.ThreadException 用它。靠,没有饭吃责怪锅。
hailercyh 2012-03-12
  • 打赏
  • 举报
回复
新建立的AppDomain会影响效率不?是否还在同一进程,能否详细说说,该如何做?谢谢。

[Quote=引用 16 楼 heguodong 的回复:]

每次调用都在一个新建立的AppDomain中
[/Quote]
heguodong 2012-03-12
  • 打赏
  • 举报
回复
每次调用都在一个新建立的AppDomain中
Saleayas 2012-03-12
  • 打赏
  • 举报
回复
接口是 C 语言的函数。
是不支持异常的。一般的接口是用 HRESULT 返回的。

还有就是,错误不是异常。
异常不是错误。
错误是需要修正的。

比如说,空指针的引用。
是不能通过异常来处理的。

异常,指的是你呼叫的函数有一个他不能处理的情况。此时,他抛出这个情况,请求呼叫者处理。
而不是函数执行的错误。
hailercyh 2012-03-12
  • 打赏
  • 举报
回复
例如dll就一个接口GetName,C#就调用GetName,增加catch也不行的,有可能捕获的位置不对?
[Quote=引用 12 楼 saleayas 的回复:]

肯定可以捕获到的。
那是捕获的位置不正确。
[/Quote]
hailercyh 2012-03-12
  • 打赏
  • 举报
回复
小小的bug,也导致exe崩溃,汗,在线等待高手解决~~~
Saleayas 2012-03-12
  • 打赏
  • 举报
回复
肯定可以捕获到的。
那是捕获的位置不正确。
  • 打赏
  • 举报
回复
但是会蓝屏
hailercyh 2012-03-12
  • 打赏
  • 举报
回复
如果用delphi或C++写的exe,就是dll报错了,也不会导致exe崩溃的,这就是差距,。net难道真的这么差劲????
[Quote=引用 8 楼 gomoku 的回复:]

这是治疗脚痛,膏药却帖嘴上。
当然要从dll根源着手了,它不健壮,调用方怎么可能平安无事?
[/Quote]
ccccffff 2012-03-12
  • 打赏
  • 举报
回复
c#也有try catch的好哇?
gomoku 2012-03-12
  • 打赏
  • 举报
回复
这是治疗脚痛,膏药却帖嘴上。
当然要从dll根源着手了,它不健壮,调用方怎么可能平安无事?
hailercyh 2012-03-12
  • 打赏
  • 举报
回复
底层的异常catch不到的。。。郁闷啊,我们不可能保证底层一点错误都没有,一有错误就导致软件崩溃,太恐怖了,C#怎么这样的啊,是否有处理方法,等待高手来解决~~~
ViewStates 2012-03-12
  • 打赏
  • 举报
回复
尝试下没有类型的CATCH块
try
{
...
}
catch
{
//we got a big error here
}
lvchun012 2012-03-12
  • 打赏
  • 举报
回复
句柄得注意了,尽量注意指针类型,异常捕获得千万小心的,我之前也遇到这些问题的
hailercyh 2012-03-12
  • 打赏
  • 举报
回复
捕获不到的,底层的异常,可能是内存操作方面的一些异常错误,例如C++写的有逻辑问题,申请开打个文件进行读写,如果句柄为空,还继续写,C++就报异常了,然后C#的程序就退出了,其实这么个小错,不应该导致程序崩溃啊。。。
hailercyh 2012-03-12
  • 打赏
  • 举报
回复
底层的异常捕获不到的。。。
bdmh 2012-03-12
  • 打赏
  • 举报
回复
那你能捕获吗,出错了,做一些处理,比如提示等等,或重新加载等

111,112

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧