Marshal.GetLastPInvokeError Metoda

Definice

Získejte chybu posledního volání 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

Poslední platforma vyvolá chybu.

Příklady

Následující příklad definuje p/invoke s nastaveným DllImportAttribute.SetLastError na true a demonstruje 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

Poslední chyba volání platformy odpovídá chybě nastavenému nejnovějším voláním platformy nakonfigurovaným DllImportAttribute.SetLastError na hodnotu nebo true voláním SetLastPInvokeError(Int32), podle toho, co se stalo naposledy.

Tato metoda vrátí pouze chyby nastavené prostřednictvím uvedených scénářů. Pokud chcete získat poslední systémovou chybu nezávisle na využití volání platformy, použijte GetLastSystemError.

Tato metoda je funkčně ekvivalentní k GetLastWin32Error. Má název, aby lépe odrážel záměr rozhraní API a jeho multiplatformní povahu. GetLastPInvokeError by měla být upřednostněná před GetLastWin32Error.

Platí pro