.NET Framework Class Library Marshal..::.GetLastWin32Error Method
Namespace:
System.Runtime.InteropServices
Assembly:
mscorlib (in mscorlib.dll)

Syntax
Public Shared Function GetLastWin32Error As Integer
public static int GetLastWin32Error()
public:
static int GetLastWin32Error()
static member GetLastWin32Error : unit -> int

Remarks
GetLastWin32Error exposes the Win32 GetLastError function from Kernel32.DLL. This method exists because it is not safe to make a direct platform invoke call to GetLastError to obtain this information. 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. The common language runtime can make internal calls to APIs that overwrite the GetLastError maintained by the operating system. 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 SetLastError field to 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.

Examples
The following example demonstrates calling the GetLastWin32Error method. The example first demonstrates calling the method with no error present and then demonstrates calling the method with an error present.
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
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

Version Information
.NET FrameworkSupported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0 .NET Framework Client ProfileSupported in: 4, 3.5 SP1

.NET Framework Security

Platforms
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role not supported), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

See Also
|
Biblioteca de clases de .NET Framework Marshal..::.GetLastWin32Error (Método) Devuelve el código de error devuelto por la última función no administrada a la que se llamó mediante la invocación de plataforma que tiene la marca DllImportAttribute..::.SetLastError activada.
Espacio de nombres:
System.Runtime.InteropServices
Ensamblado:
mscorlib (en mscorlib.dll)

Sintaxis
Public Shared Function GetLastWin32Error As Integer
public static int GetLastWin32Error()
public:
static int GetLastWin32Error()
static member GetLastWin32Error : unit -> int

Comentarios
GetLastWin32Error expone la función Win32 GetLastError de Kernel32.DLL. Este método existe porque no es seguro realizar directamente una llamada de invocación de plataforma a GetLastError para obtener esta información. Si desea obtener acceso a este código de error, debe llamar a GetLastWin32Error en lugar de crear una definición de invocación de plataforma propia para GetLastError y llamarla. Common Language Runtime puede realizar llamadas internas a ciertas API que sobrescriben el GetLastError que mantiene el sistema operativo. Solo puede usar este método para obtener códigos de error si aplica System.Runtime.InteropServices..::.DllImportAttribute a la firma del método y establece el campo SetLastError en true. El procedimiento empleado varía según el lenguaje de origen que se utilice: C# y C++ son false de forma predeterminada, pero la instrucción Declare en Visual Basic es true.

Ejemplos
En el siguiente ejemplo se muestra cómo llamar al método GetLastWin32Error. En el ejemplo se muestra primero la llamada al método cuando no existe ningún error y, después, la llamada al método cuando existe un error.
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
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

Información de versión
.NET FrameworkCompatible con: 4, 3.5, 3.0, 2.0, 1.1, 1.0 .NET Framework Client ProfileCompatible con: 4, 3.5 SP1

Seguridad de .NET Framework

Plataformas
Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (no se admite Server Core), Windows Server 2008 R2 (se admite Server Core con SP1 o posterior), Windows Server 2003 SP2
.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Vea también
|