首页 > 其他 > 详细

关于C# 调用 C dll时,抓获C的异常

时间:2014-06-18 17:11:02      阅读:587      评论:0      收藏:0      [点我收藏+]

  最近一直被C# 调用native code时的内存错误,各种错误所困扰。而且在.net 4.0中非托管代码的异常不能被托管代码抓获,导致程序直接crash。

  最终找到了.net 的方法。MSDN有关于expection 的详细解释

  1. 在.net 3.5中是可以抓取AccessViolationException这个C崩溃的异常的,因此可以尝试使用这个.net 3.5重新编译

  2.在.net 4,4.5中可以尝试在app.config 文件中加上如下的配置,

      

      <configuration>
        <runtime>
           <legacyCorruptedStateExceptionsPolicy enabled="true"/>
        </runtime>

     <configuration>

  3.为函数标记[HandleProcessCorruptedStateExceptions]

    

// This program runs as part of an automated test system so you need 
// to prevent the normal Unhandled Exception behavior (Watson dialog). 
// Instead, print out any exceptions and exit with an error code. 
[HandleProcessCorruptedStateExceptions] 
[SecurityCritical]
public static int Main() 
{ 
   try
     {
       // Catch any exceptions leaking out of the program CallMainProgramLoop(); 
     }
   catch (Exception e) 
       // We could be catching anything here 
     {
         // The exception we caught could have been a program error
        // or something much more serious. Regardless, we know that
        // something is not right. We‘ll just output the exception 
       // and exit with an error. We won‘t try to do any work when
       // the program or process is in an unknown state!

        System.Console.WriteLine(e.Message); 
        return 1; 
     } 

  return 0; 

}

但是我使用第二种方法,仍然未解决问题,留待解决。


关于C# 调用 C dll时,抓获C的异常,布布扣,bubuko.com

关于C# 调用 C dll时,抓获C的异常

原文:http://www.cnblogs.com/stupidhod/p/3791022.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!