zoukankan      html  css  js  c++  java
  • c# 捕获非托管异常

    在.NET 4.0之后,CLR将会区别出一些异常(都是SEH异常),将这些异常标识为破坏性异常(Corrupted State Exception)。针对这些异常,CLR的catch块不会捕捉这些异常。SEH异常通常是非托管代码抛出的。

    例如:调用c和c++的lib和dll库,都是非托管的。

    解决:

    1.在托管程序的.config文件里,启用legacyCorruptedStateExceptionsPolicy这个属性,即简化的.config文件类似下面的文件:

    <?xml version="1.0"?>
    <configuration>
     <startup>
       <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
     </startup>
        <runtime>
          <legacyCorruptedStateExceptionsPolicy enabled="true" />
        </runtime>
    </configuration>
    

    2.在需要捕捉破坏性异常的函数外面加一个HandleProcessCorruptedStateExceptions属性,这个属性只控制一个函数,对托管程序的其他函数没有影响

    [HandleProcessCorruptedStateExceptions]
     void function()
     {
         try
         {
         }
         catch (Exception e)
         {
         }
     }
    
  • 相关阅读:
    Jenkins动态部署方案
    01-Java学习笔记
    Tcp实现简单的大小写转换功能
    JavaScript 执行环境 与 变量对象
    JQuery
    JavaScript模板引擎
    ECMA6
    谷歌控制台
    prototype 与 __proto__
    JavaScript Math
  • 原文地址:https://www.cnblogs.com/yaosj/p/6604891.html
Copyright © 2011-2022 走看看