DllImportAttribute.SetLastError 字段
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
指示在从特性化方法返回之前,被调用方是在 Windows 上还是在 errno
) 的其他平台上设置错误 SetLastError
(。
public: bool SetLastError;
public bool SetLastError;
val mutable SetLastError : bool
Public SetLastError As Boolean
字段值
示例
在某些情况下, Visual Basic 开发人员会使用DllImportAttribute代替 Declare
语句在托管代码中定义 DLL 函数。 设置 SetLastError 字段便是这其中的一种情况。
[DllImport("user32.dll", SetLastError = true)]
int MessageBoxA(IntPtr hWnd, String^ Text,
String^ Caption, unsigned int Type);
internal static class NativeMethods
{
[DllImport("user32.dll", SetLastError = true)]
internal static extern int MessageBoxA(
IntPtr hWnd, string lpText, string lpCaption, uint uType);
}
Friend Class NativeMethods
<DllImport("user32.dll", SetLastError:=True)>
Friend Shared Function MessageBoxA(hWnd As IntPtr, lpText As String,
lpCaption As String, uType As UInteger) As Integer
End Function
End Class
注解
true
如果指示被调用方将通过 在 Windows 或其他errno
平台上设置错误SetLastError
,则为 ;否则为 false
。 默认为 false
。
如果此字段设置为 true
,则运行时封送处理程序会调用 GetLastError
或 errno
并缓存返回的值,以防止它被其他 API 调用覆盖。
可以通过在 .NET 6.0 及更高版本GetLastWin32Error或 .NET 5 及更低版本或 .NET Framework 上调用 GetLastPInvokeError 来检索错误代码。
在 .NET 上,当此字段true
设置为 0
时,在调用被调用方之前,将清除错误信息 (设置为) 。 在 .NET Framework 上,错误信息未清除。
这意味着,由 和 GetLastWin32Error 在 .NET 上返回GetLastPInvokeError的错误信息仅表示最后一个 p/invoke 中的错误信息,并将 DllImportAttribute.SetLastError 设置为 true
。 在 .NET Framework 上,错误信息可以从一个 p/invoke 一直保留到下一个 p/invoke。