Este tema aún no ha recibido ninguna valoración Valorar este tema

Marshal.GetLastWin32Error (Método)

Devuelve el código de error devuelto por la última función no administrada a la que se ha llamado mediante la invocación de plataforma que tiene el indicador DllImportAttribute.SetLastError activado.

Espacio de nombres: System.Runtime.InteropServices
Ensamblado: mscorlib (en mscorlib.dll)

public static int GetLastWin32Error ()
public static int GetLastWin32Error ()
public static function GetLastWin32Error () : int

Valor devuelto

Último código de error establecido por una llamada al método API SetLastError de Win32.

GetLastWin32Error expone el método API GetLastError de Win32 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.

Sólo puede utilizar 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. Para obtener más información sobre los métodos API GetLastError y SetLastError de Win32, vea MSDN Library.

NotaNota

Este método utiliza SecurityAction.LinkDemand para evitar que se le llame desde código que no sea de confianza; sólo el llamador inmediato debe disponer del permiso SecurityPermissionAttribute.UnmanagedCode. Si se puede llamar al código desde código de confianza parcial, no pase ninguna entrada de usuario a los métodos de la clase Marshal sin validación. Para conocer las limitaciones importantes que existen a la hora de utilizar el miembro LinkDemand, vea Demand frente a LinkDemand.

En el siguiente ejemplo de código se muestra la forma de llamar al método GetLastWin32Error. En el ejemplo de código 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.

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)]
    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

  • SecurityPermission  para obtener permiso para llamar al código no administrado. Enumeración asociada: UnmanagedCode. Acción de seguridad: LinkDemand.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition

.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

.NET Framework

Compatible con: 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 2.0, 1.0
¿Te ha resultado útil?
(Caracteres restantes: 2000)
Contenido de la comunidad Agregar