Marshal.GetLastPInvokeError Metoda

Definice

Získejte chybu vyvolání poslední platformy v aktuálním vlákně.

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

Návraty

Chyba vyvolání poslední platformy.

Příklady

Následující příklad definuje p/invoke s nastaveným DllImportAttribute.SetLastErrortrue nastavením a ukazuje použití GetLastPInvokeError k získání poslední chyby p/invoke.

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}");
    }
}

Poznámky

Chyba vyvolání poslední platformy odpovídá chybě nastavené buď nejnovějším voláním platformy, které bylo nakonfigurováno s nastaveným DllImportAttribute.SetLastErrortrue voláním nebo voláním SetLastPInvokeError(Int32), podle toho, co se stalo naposledy.

Tato metoda vrátí pouze chyby nastavené ve zmíněných scénářích. Pokud chcete získat poslední systémovou chybu nezávislou na využití vyvolání platformy, použijte GetLastSystemError.

Tato metoda je funkčně ekvivalentní GetLastWin32Error. Pojmenuje se tak, aby lépe odrážel záměr rozhraní API a jeho charakter pro různé platformy. GetLastPInvokeError by měla být upřednostňovaná před GetLastWin32Error.

Platí pro