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)
         {
         }
     }
    
  • 相关阅读:
    构建之法阅读笔记01
    最长英语单词链
    第十五周学习总结
    寻找“水王”
    Happy Necklace HDU
    Bi-shoe and Phi-shoe LightOJ
    The Embarrassed Cryptographer POJ
    Big Number HDU
    矩阵乘法模板C/C++
    Baby Step,Giant Step算法模板
  • 原文地址:https://www.cnblogs.com/yaosj/p/6604891.html
Copyright © 2011-2022 走看看