Freigeben über


Marshal.GetLastPInvokeError Methode

Definition

Ruft den letzten Plattformaufruffehler im aktuellen Thread ab.

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

Gibt zurück

Der letzte Plattformaufruffehler.

Beispiele

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

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 Plattformaufruffehler entspricht dem Fehler, der entweder durch den letzten Plattformaufruf festgelegt wurde, der mit DllImportAttribute.SetLastError festgelegt auf true konfiguriert wurde, oder durch einen Aufruf SetLastPInvokeError(Int32)von , je nachdem, was zuletzt passiert ist.

Diese Methode gibt nur Fehler zurück, die über die genannten Szenarien festgelegt wurden. Um den letzten Systemfehler unabhängig von der Plattformaufrufnutzung zu erhalten, verwenden Sie GetLastSystemError.

Diese Methode entspricht funktional GetLastWin32Error. Es wird benannt, um die Absicht der API und ihre plattformübergreifende Natur besser widerzuspiegeln. GetLastPInvokeError sollte gegenüber GetLastWin32Errorbevorzugt werden.

Gilt für: