Marshal.GetLastWin32Error Método

Definição

Retorna o código de erro retornado pela última função não gerenciada chamada com a invocação da plataforma que tem o sinalizador SetLastError definido.Returns the error code returned by the last unmanaged function that was called using platform invoke that has the SetLastError flag set.

public:
 static int GetLastWin32Error();
[System.Security.SecurityCritical]
public static int GetLastWin32Error ();
static member GetLastWin32Error : unit -> int
Public Shared Function GetLastWin32Error () As Integer

Retornos

O último código de erro definido por uma chamada para a função SetLastError do Win32.The last error code set by a call to the Win32 SetLastError function.

Atributos

Exemplos

O exemplo a seguir chama o método GetLastWin32Error.The following example calls the GetLastWin32Error method. O exemplo primeiro demonstra como chamar o método sem nenhum erro presente e, em seguida, demonstra a chamada do método com um erro presente.The example first demonstrates calling the method with no error present and then demonstrates calling the method with an error present.

using System;
using System.Runtime.InteropServices;

internal class Win32
{
    // Use DllImportAttribute to inport the Win32 MessageBox
    // function.  Set the SetLastError flag to true to allow
    // the function to set the Win32 error.
    [DllImportAttribute("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    public static extern int MessageBox(IntPtr hwnd, String text, String caption, uint type);

}

class Program
{

    static void Run()
    {
        // Call the MessageBox with normal parameters.

        Console.WriteLine("Calling Win32 MessageBox without error...");

        Win32.MessageBox(new IntPtr(0), "Press OK...", "Press OK Dialog", 0);

        // Get the last error and display it.
        int error = Marshal.GetLastWin32Error();

        Console.WriteLine("The last Win32 Error was: " + error);

        // Call the MessageBox with an invalid window handle to
        // produce a Win32 error.

        Console.WriteLine("Calling Win32 MessageBox with error...");

        Win32.MessageBox(new IntPtr(123132), "Press OK...", "Press OK Dialog", 0);

        // Get the last error and display it.

        error = Marshal.GetLastWin32Error();

        Console.WriteLine("The last Win32 Error was: " + error);
    }

    static void Main(string[] args)
    {
        Run();
    }
}
// This code example displays the following to the console: 
//
// Calling Win32 MessageBox without error...
// The last Win32 Error was: 0
// Calling Win32 MessageBox with error...
// The last Win32 Error was: 1400
Imports System.Runtime.InteropServices

Module Win32
    ' Use DllImportAttribute to inport the Win32 MessageBox
    ' function.  Set the SetLastError flag to true to allow
    ' the function to set the Win32 error.
    <DllImportAttribute("user32.dll", SetLastError:=True, CharSet:=CharSet.Unicode)> _
    Function MessageBox(ByVal hwnd As IntPtr, ByVal text As String, ByVal caption As String, ByVal type As UInt32) As Integer
    End Function

End Module

Module Program


    Sub Run()


        ' Call the MessageBox with normal parameters.

        Console.WriteLine("Calling Win32 MessageBox without error...")

        Win32.MessageBox(New IntPtr(0), "Press OK...", "Press OK Dialog", 0)

        ' Get the last error and display it.
        Dim errorVal As Integer

        errorVal = Marshal.GetLastWin32Error()

        Console.WriteLine("The last Win32 Error was: " + errorVal)

        ' Call the MessageBox with an invalid window handle to
        ' produce a Win32 error.

        Console.WriteLine("Calling Win32 MessageBox with error...")

        Win32.MessageBox(New IntPtr(123132), "Press OK...", "Press OK Dialog", 0)

        ' Get the last error and display it.

        errorVal = Marshal.GetLastWin32Error()

        Console.WriteLine("The last Win32 Error was: " + errorVal)

    End Sub

    Sub Main(ByVal args() As String)

        Run()

    End Sub

End Module

' This code example displays the following to the console: 
'
' Calling Win32 MessageBox without error...
' The last Win32 Error was: 0
' Calling Win32 MessageBox with error...
' The last Win32 Error was: 1400

Comentários

Em sistemas Windows, GetLastWin32Error expõe a função Win32 GetLastError de Kernel32. dll.On Windows systems, GetLastWin32Error exposes the Win32 GetLastError function from Kernel32.DLL. Esse método existe porque não é confiável para fazer uma chamada de plataforma direta chamar para GetLastError para obter essas informações.This method exists because it is not reliable to make a direct platform invoke call to GetLastError to obtain this information. Se você quiser acessar esse código de erro, deverá chamar GetLastWin32Error em vez de escrever sua própria definição de invocação de plataforma para GetLastError e chamá-la.If you want to access this error code, you must call GetLastWin32Error instead of writing your own platform invoke definition for GetLastError and calling it. O Common Language Runtime pode fazer chamadas internas para APIs que substituem o GetLastError mantido pelo sistema operacional.The common language runtime can make internal calls to APIs that overwrite the GetLastError maintained by the operating system.

Você pode usar esse método para obter códigos de erro somente se aplicar o System.Runtime.InteropServices.DllImportAttribute à assinatura do método e definir o campo DllImportAttribute.SetLastError como true.You can use this method to obtain error codes only if you apply the System.Runtime.InteropServices.DllImportAttribute to the method signature and set the DllImportAttribute.SetLastError field to true. O processo para isso varia dependendo do idioma de origem usado: C# e C++ são false por padrão, mas a instrução Declare no Visual Basic é true.The process for this varies depending upon the source language used: C# and C++ are false by default, but the Declare statement in Visual Basic is true.

Há uma diferença no comportamento do método GetLastWin32Error no .NET Core e .NET Framework quando DllImportAttribute.SetLastError é true.There is a difference in the behavior of the GetLastWin32Error method on .NET Core and .NET Framework when DllImportAttribute.SetLastError is true. Em .NET Framework, o método GetLastWin32Error pode reter informações de erro de uma chamada P/Invoke para a próxima.On .NET Framework, the GetLastWin32Error method can retain error information from one P/Invoke call to the next. No .NET Core, as informações de erro são limpas antes da chamada P/Invoke, e o GetLastWin32Error representa apenas informações de erro da última chamada de método.On .NET Core, error information is cleared before P/Invoke call, and the GetLastWin32Error represents only error information from the last method call.

Segurança

SecurityCriticalAttribute
requer confiança total para o chamador imediato.requires full trust for the immediate caller. Este membro não pode ser usado pelo código transparente ou parcialmente confiável.This member cannot be used by partially trusted or transparent code.

Aplica-se a

Veja também