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 会自动映射到相应的异常类