Sdílet prostřednictvím


Marshal.GetLastPInvokeError Metoda

Definice

Získejte poslední chybu vyvolá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í chyba volání platformy.

Příklady

Následující příklad definuje volání p/s nastaveným DllImportAttribute.SetLastError na true a ukazuje použití GetLastPInvokeError k získání poslední chyby volání 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 vyvolání platformy odpovídá chybě nastavené buď nejnovějším voláním platformy nakonfigurovaným DllImportAttribute.SetLastError na hodnotu , true nebo 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 GetLastWin32Errormetodě . Má název, aby lépe odrážel záměr rozhraní API a jeho povahu pro různé platformy. GetLastPInvokeError by měla být upřednostněná před GetLastWin32Error.

Platí pro