C#写的exe,调用了C++的dll,C++一有异常,进程就退出。如何把c#程序做的健壮些?我们不能保证底层C++没有异常,一有异常,c#程序就崩溃退出了,能否不崩溃,这样用户体验很不好。

解决方案 »

  1.   

    捕获不到的,底层的异常,可能是内存操作方面的一些异常错误,例如C++写的有逻辑问题,申请开打个文件进行读写,如果句柄为空,还继续写,C++就报异常了,然后C#的程序就退出了,其实这么个小错,不应该导致程序崩溃啊
      

  2.   

    尝试下没有类型的CATCH块
    try
    {
     ...
    }
    catch
    {
      //we got a big error here
    }
      

  3.   

    底层的异常catch不到的郁闷啊,我们不可能保证底层一点错误都没有,一有错误就导致软件崩溃,太恐怖了,C#怎么这样的啊,是否有处理方法,等待高手来解决~~~
      

  4.   

    这是治疗脚痛,膏药却帖嘴上。
    当然要从dll根源着手了,它不健壮,调用方怎么可能平安无事?
      

  5.   

    如果用delphi或C++写的exe,就是dll报错了,也不会导致exe崩溃的,这就是差距,。net难道真的这么差劲????
      

  6.   

    小小的bug,也导致exe崩溃,汗,在线等待高手解决~~~
      

  7.   

    例如dll就一个接口GetName,C#就调用GetName,增加catch也不行的,有可能捕获的位置不对?
      

  8.   

    接口是 C 语言的函数。
    是不支持异常的。一般的接口是用 HRESULT 返回的。还有就是,错误不是异常。
    异常不是错误。
    错误是需要修正的。比如说,空指针的引用。
    是不能通过异常来处理的。异常,指的是你呼叫的函数有一个他不能处理的情况。此时,他抛出这个情况,请求呼叫者处理。
    而不是函数执行的错误。
      

  9.   

    每次调用都在一个新建立的AppDomain中
      

  10.   

    新建立的AppDomain会影响效率不?是否还在同一进程,能否详细说说,该如何做?谢谢。
      

  11.   

    1.可以建立AppDomain加载。2.建立一个应用程序的错误抓取。也就是在主线程中抓取。pplication.ThreadException 用它。靠,没有饭吃责怪锅。
      

  12.   

    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
    和Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);试过都不行的。不知道你说的是否同一个方法。
      

  13.   

    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
    和Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException); 可以的,谢谢各位了,结贴。