.Net 互操作中的异常处理

 1. 使用 Unmanaged Code

       在.Net 程序集中使用Native Code 被成为platform invoke (平台调用).我们可以使用平台调用来调用Win32 API,或者旧的Dll 文件。

      Native code 往往通过返回一个数字来表示函数的执行情况。非0 往往表示调用成功,0则表示函数发生了错误。当在.Net 中通过平台调用来调用旧式的Dll 时应遵循如下步骤:

       1.1 当申明 非托管的过程时应将 SetLastError 字段设为true

             比如:

             [DllImport("KERNEL32.DLL", EntryPoint="MoveFile", SetLastError=true,CharSet=CharSet.Unicode, ExactSpelling=false, 
    CallingConvention=CallingConvention.StdCall)]
            public static extern bool MoveFile(string src, string dest);

        1.2 判断 非托管过程的返回值

        1.3 如果返回值为0,通过调用Marshal.GetLastWin32Error 方法来得到相应的错误码。

         1.4 通过错误码对错误进行相应的处理。

2.使用 COM

         .Net 通过异常类来处理 错误。COM则同HResult 来表示错误 。所有的.Net exception 类都包含HResult属性来映射到COM的HResult 。

          当一个.Net 对象中发生异常时,此异常会自动映射到相应的HResult,并返回给COM。相似的,当COM对象中发生异常时,COM HResult 会自动映射到相应的异常类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值