在 MSDN 上,我找到了两个属性的以下描述:
PreserveSig将 PreserveSig 字段设置为 true 以直接转换具有 HRESULT 或 retval 值的非托管签名;将其设置为 false 以自动将 HRESULT 或 retval 值转换为异常。默认情况下,PreserveSig 字段为 true。
SetLastError使调用者能够使用 Marshal.GetLastWin32Error API 函数来确定执行方法时是否发生错误。在 Visual Basic 中,默认值为 true(这会增加一些开销);在 C# 和 C++ 中,默认值为 false。
我的问题是:这两者如何相互关联?假设我将 PreserveSig 设置为“false”——这意味着我应该将 HRESULT 转换为异常——如果非托管函数返回表示错误或未发生错误的整数,如何将其转换为异常?
另外,如果我设法使用 PreserveSig 提取异常,为什么还需要调用 GetLastWin32Error 方法?
亲切的问候PK