Freigeben über


Marshal.GetLastWin32Error-Methode

Gibt den Fehlercode zurück, der durch die letzte nicht verwaltete Funktion zurückgegeben wurde, die mit einem Plattformaufruf aufgerufen wurde und bei der das DllImportAttribute.SetLastError-Flag festgelegt wurde.

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

Syntax

'Declaration
Public Shared Function GetLastWin32Error As Integer
'Usage
Dim returnValue As Integer

returnValue = Marshal.GetLastWin32Error
public static int GetLastWin32Error ()
public:
static int GetLastWin32Error ()
public static int GetLastWin32Error ()
public static function GetLastWin32Error () : int

Rückgabewert

Der letzte Fehlercode, der durch einen Aufruf der SetLastError-Methode der Win32-API festgelegt wurde.

Hinweise

GetLastWin32Error macht die GetLastError-Methode der Win32-API aus Kernel32.DLL verfügbar. Diese Methode ist vorhanden, weil ein direkter Plattformaufruf von GetLastError nicht sicher ausgeführt werden kann, um diese Information abzurufen. Wenn Sie auf diesen Fehlercode zugreifen möchten, müssen Sie GetLastWin32Error aufrufen, anstatt eine eigene Plattformaufrufdefinition für GetLastError zu schreiben und diese aufzurufen. Die Common Language Runtime kann interne Aufrufe von APIs ausführen, die das vom Betriebssystem verwaltete GetLastError überschreiben.

Sie können mit dieser Methode nur dann Fehlercodes abrufen, wenn System.Runtime.InteropServices.DllImportAttribute auf die Methodensignatur angewendet und das SetLastError-Feld auf true festgelegt wird. Die Verarbeitung hierfür variiert in Abhängigkeit von der verwendeten Quellsprache: C# und C++ sind in der Standardeinstellung false, die Declare-Anweisung in Visual Basic ist jedoch true. Weitere Informationen über die GetLastError-Win32-API-Methode und die SetLastError-Win32-API-Methode finden Sie in der MSDN Library.

Hinweis

Diese Methode verwendet SecurityAction.LinkDemand, um einen Aufruf aus nicht vertrauenswürdigem Code zu verhindern. Nur der direkte Aufrufer muss über die SecurityPermissionAttribute.UnmanagedCode-Berechtigung verfügen. Wenn der Code aus teilweise vertrauenswürdigem Code aufgerufen werden kann, dürfen Benutzereingaben nicht ohne Validierung an Methoden der Marshal-Klasse übergeben werden. Wichtige Einschränkungen bei der Verwendung des LinkDemand-Members finden Sie unter "Demand" und "LinkDemand".

Beispiel

Im folgenden Codebeispiel wird das Aufrufen der GetLastWin32Error-Methode veranschaulicht. Das Codebeispiel veranschaulicht zunächst den Aufruf der Methode, wenn kein Fehler aufgetreten ist, und anschließend den Aufruf der Methode, wenn ein Fehler aufgetreten ist.

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

.NET Framework-Sicherheit

Plattformen

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

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

Marshal-Klasse
Marshal-Member
System.Runtime.InteropServices-Namespace
DllImportAttribute-Klasse