Marshal.GetLastPInvokeError Methode

Definition

Abrufen des letzten Aufruffehlers der Plattform für den aktuellen Thread.

public:
 static int GetLastPInvokeError();
public static int GetLastPInvokeError();
static member GetLastPInvokeError : unit -> int
Public Shared Function GetLastPInvokeError () As Integer

Gibt zurück

Der letzte Aufruffehler der Plattform.

Beispiele

Im folgenden Beispiel wird ein p/invoke-Element definiert, das DllImportAttribute.SetLastError auf "p/invoke" festgelegt true ist, und veranschaulicht die Verwendung GetLastPInvokeError , um den letzten P/Invoke-Fehler abzurufen.

using System;
using System.Runtime.InteropServices;

// These functions specify SetLastError=true to propagate the last error from the p/invoke
// such that it can be retrieved using Marshal.GetLastPInvokeError().
internal static class Kernel32
{
    [DllImport(nameof(Kernel32), ExactSpelling = true, SetLastError = true)]
    internal static extern bool SetCurrentDirectoryW([MarshalAs(UnmanagedType.LPWStr)] string path);
}

internal static class libc
{
    [DllImport(nameof(libc), SetLastError = true)]
    internal static extern int chdir([MarshalAs(UnmanagedType.LPUTF8Str)] string path);
}

class Program
{
    public static void Main(string[] args)
    {
        // Call p/invoke with valid arguments.
        CallPInvoke(AppContext.BaseDirectory);

        // Call p/invoke with invalid arguments.
        CallPInvoke(string.Empty);
    }

    private static void CallPInvoke(string path)
    {
        if (OperatingSystem.IsWindows())
        {
            Console.WriteLine($"Calling SetCurrentDirectoryW with path '{path}'");
            Kernel32.SetCurrentDirectoryW(path);
        }
        else
        {
            Console.WriteLine($"Calling chdir with path '{path}'");
            libc.chdir(path);
        }

        // Get the last p/invoke error and display it.
        int error = Marshal.GetLastPInvokeError();
        Console.WriteLine($"Last p/invoke error: {error}");
    }
}

Hinweise

Der letzte Aufruffehler der Plattform entspricht dem Fehler, der entweder durch den letzten Plattformaufruf festgelegt wurde, der mit DllImportAttribute.SetLastError festgelegtem true oder durch einen Aufruf SetLastPInvokeError(Int32)konfiguriert wurde , je nachdem, was zuletzt aufgetreten ist.

Diese Methode gibt nur Fehler zurück, die über die erwähnten Szenarien festgelegt wurden. Verwenden Sie die Verwendung, GetLastSystemErrorum den letzten Systemfehler unabhängig von der Plattform-Aufrufnutzung zu erhalten.

Diese Methode entspricht funktionell GetLastWin32Errordem . Es wird benannt, um die Absicht der API und ihrer plattformübergreifenden Natur besser widerzuspiegeln. GetLastPInvokeError sollte gegenüber GetLastWin32Errorbevorzugt werden.

Gilt für: