Marshal.GetLastPInvokeError Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ruft den letzten Plattformaufruffehler im aktuellen Thread ab.
public:
static int GetLastPInvokeError();
public static int GetLastPInvokeError ();
static member GetLastPInvokeError : unit -> int
Public Shared Function GetLastPInvokeError () As Integer
Gibt zurück
Der letzte Plattformaufruffehler.
Beispiele
Im folgenden Beispiel wird ein p/invoke-Element definiert, das DllImportAttribute.SetLastError auf true
festgelegt ist, und veranschaulicht die Verwendung von GetLastPInvokeError , um den letzten p/invoke-Fehler zu erhalten.
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}");
}
}
Hinweise
Der letzte Plattformaufruffehler entspricht dem Fehler, der entweder durch den letzten Plattformaufruf festgelegt wurde, der mit DllImportAttribute.SetLastError festgelegt auf true
konfiguriert wurde, oder durch einen Aufruf SetLastPInvokeError(Int32)von , je nachdem, was zuletzt passiert ist.
Diese Methode gibt nur Fehler zurück, die über die genannten Szenarien festgelegt wurden. Um den letzten Systemfehler unabhängig von der Plattformaufrufnutzung zu erhalten, verwenden Sie GetLastSystemError.
Diese Methode entspricht funktional GetLastWin32Error. Es wird benannt, um die Absicht der API und ihre plattformübergreifende Natur besser widerzuspiegeln. GetLastPInvokeError sollte gegenüber GetLastWin32Errorbevorzugt werden.