Marshal.GetLastPInvokeError Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottenere l'ultimo errore di platform invoke nel thread corrente.
public:
static int GetLastPInvokeError();
public static int GetLastPInvokeError ();
static member GetLastPInvokeError : unit -> int
Public Shared Function GetLastPInvokeError () As Integer
Restituisce
Ultimo errore di platform invoke.
Esempio
Nell'esempio seguente viene definito un p/invoke con DllImportAttribute.SetLastError impostato su true
e viene illustrato l'uso GetLastPInvokeError di per ottenere l'ultimo errore 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}");
}
}
Commenti
L'ultimo errore platform invoke corrisponde al set di errori impostato dalla piattaforma invoke più recente configurata con DllImportAttribute.SetLastError impostato su true
o da una chiamata a SetLastPInvokeError(Int32), a qualsiasi condizione che si è verificata per ultimo.
Questo metodo restituirà solo gli errori impostati tramite gli scenari menzionati. Per ottenere l'ultimo errore di sistema indipendentemente dall'utilizzo di Platform Invoke, usare GetLastSystemError.
Questo metodo è funzionalmente equivalente a GetLastWin32Error. Viene denominato per riflettere meglio la finalità dell'API e la sua natura multipiattaforma. GetLastPInvokeError deve essere preferibile rispetto a GetLastWin32Error.