Marshal.GetLastPInvokeError Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Obtenha o erro de invocação da última plataforma no tópico atual.
public:
static int GetLastPInvokeError();
public static int GetLastPInvokeError();
static member GetLastPInvokeError : unit -> int
Public Shared Function GetLastPInvokeError () As Integer
Devoluções
O erro de invocação da última plataforma.
Exemplos
O exemplo seguinte define um p/invoke com DllImportAttribute.SetLastError definido como true e demonstra o uso GetLastPInvokeError 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}");
}
}
Observações
O último erro de invocação de plataforma corresponde ao erro definido pela invocação de plataforma mais recente que foi configurada com DllImportAttribute.SetLastErrortrue definido para ou por uma chamada para SetLastPInvokeError(Int32), o que ocorreu por último.
Este método só devolverá erros definidos através dos cenários mencionados. Para obter o último erro do sistema independente do uso invocado pela plataforma, use GetLastSystemError.
Este método é funcionalmente equivalente a GetLastWin32Error. É nomeado para refletir melhor a intenção da API e a sua natureza multiplataforma. GetLastPInvokeError deve ser preferido em vez GetLastWin32Errorde .