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.
Abrufen des letzten Aufruffehlers der Plattform für den aktuellen Thread.
public:
static int GetLastPInvokeError();
public static int GetLastPInvokeError();
static member GetLastPInvokeError : unit -> int
Public Shared Function GetLastPInvokeError () As Integer
Gibt zurück
Der letzte Aufruffehler der Plattform.
Beispiele
Im folgenden Beispiel wird ein p/invoke-Element definiert, das DllImportAttribute.SetLastError auf "p/invoke" festgelegt true ist, und veranschaulicht die Verwendung GetLastPInvokeError , um den letzten P/Invoke-Fehler abzurufen.
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 Aufruffehler der Plattform entspricht dem Fehler, der entweder durch den letzten Plattformaufruf festgelegt wurde, der mit DllImportAttribute.SetLastError festgelegtem true oder durch einen Aufruf SetLastPInvokeError(Int32)konfiguriert wurde , je nachdem, was zuletzt aufgetreten ist.
Diese Methode gibt nur Fehler zurück, die über die erwähnten Szenarien festgelegt wurden. Verwenden Sie die Verwendung, GetLastSystemErrorum den letzten Systemfehler unabhängig von der Plattform-Aufrufnutzung zu erhalten.
Diese Methode entspricht funktionell GetLastWin32Errordem . Es wird benannt, um die Absicht der API und ihrer plattformübergreifenden Natur besser widerzuspiegeln. GetLastPInvokeError sollte gegenüber GetLastWin32Errorbevorzugt werden.