Partilhar via


Marshal.GetLastPInvokeError Método

Definição

Obtenha o último erro de invocação de plataforma no thread atual.

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

Retornos

O último erro de invocação de plataforma.

Exemplos

O exemplo a seguir define um p/invoke com definido como DllImportAttribute.SetLastErrortrue e demonstra o uso GetLastPInvokeError de para obter o último erro 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}");
    }
}

Comentários

O último erro de invocação de plataforma corresponde ao conjunto de erros definido pela invocação de plataforma mais recente que foi configurada com definido true como DllImportAttribute.SetLastError ou por uma chamada para SetLastPInvokeError(Int32), o que aconteceu por último.

Esse método só retornará erros definidos por meio dos cenários mencionados. Para obter o último erro do sistema independente do uso de invocação de plataforma, use GetLastSystemError.

Esse método é funcionalmente equivalente a GetLastWin32Error. Ele é nomeado para refletir melhor a intenção da API e sua natureza multiplataforma. GetLastPInvokeError deve ser preferencial em vez de GetLastWin32Error.

Aplica-se a