DllImportAttribute.SetLastError 字段

定义

指示在从特性化方法返回之前,被调用方是在 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,则运行时封送处理程序会调用 GetLastErrorerrno 并缓存返回的值,以防止它被其他 API 调用覆盖。 可以通过在 .NET 6.0 及更高版本或 GetLastWin32Error .NET 5 及更低版本上调用 GetLastPInvokeError 或 .NET Framework 来检索错误代码。

在 .NET 上,当此字段true设置为 0 时,在调用被调用方之前,将清除错误信息 (设置为) 。 在.NET Framework时,不会清除错误信息。 这意味着,由 和 GetLastWin32Error 在 .NET 上返回GetLastPInvokeError的错误信息仅表示最后一个 p/invoke 中的错误信息,并将 DllImportAttribute.SetLastError 设置为 true。 在.NET Framework时,错误信息可以从一个 p/调用保存到下一个 p/invoke。

适用于

另请参阅