Compartilhar via


Método Marshal.GetLastWin32Error ()

 

Dica

The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.

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 DllImportAttribute.SetLastError definido.

Namespace:   System.Runtime.InteropServices
Assembly:  mscorlib (em mscorlib.dll)

Sintaxe

[SecurityCriticalAttribute]
public static int GetLastWin32Error()
public:
[SecurityCriticalAttribute]
static int GetLastWin32Error()
[<SecurityCriticalAttribute>]
static member GetLastWin32Error : unit -> int
<SecurityCriticalAttribute>
Public Shared Function GetLastWin32Error As Integer

Valor Retornado

Type: System.Int32

O último código de erro definido por uma chamada para o Win32 SetLastError função.

Comentários

GetLastWin32Errorexpõe o Win32 GetLastError função Kernel32. Este método existe porque não é seguro fazer uma plataforma direta invocar a chamada para GetLastError para obter essas informações. Se você quiser acessar esse código de erro, você deve chamar GetLastWin32Error em vez de escrever sua própria plataforma invocar definição para GetLastError e chamando-o. O common language runtime pode fazer chamadas internas para APIs que substituir a GetLastError mantidos pelo sistema operacional.

Você pode usar esse método para obter os códigos de erro somente se você aplicar o System.Runtime.InteropServices.DllImportAttribute para a assinatura de método e defina o SetLastError campotrue. O processo varia dependendo do idioma de origem usado: c# e C++ são false por padrão, mas o Declare instrução no Visual Basic é true.

Exemplos

O exemplo a seguir demonstra a chamar o GetLastWin32Errormétodo. O exemplo demonstra primeiro chamar o método sem erro presente e, em seguida, demonstra isso chamando o método com um erro presente.

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

Segurança

SecurityCriticalAttribute

requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

Informações de Versão

Plataforma Universal do Windows
Disponível desde 8
.NET Framework
Disponível desde 1.1
Biblioteca de Classes Portátil
Com suporte no: plataformas portáteis do .NET
Silverlight
Disponível desde 2.0
Windows Phone Silverlight
Disponível desde 7.0
Windows Phone
Disponível desde 8.1

Confira Também

DllImportAttribute
Classe Marshal
Namespace System.Runtime.InteropServices

Retornar ao início