Marshal.GetLastPInvokeError Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Haal de laatste aanroepfout van het platform op in de huidige thread.
public:
static int GetLastPInvokeError();
public static int GetLastPInvokeError();
static member GetLastPInvokeError : unit -> int
Public Shared Function GetLastPInvokeError () As Integer
Retouren
De laatste fout bij het aanroepen van het platform.
Voorbeelden
In het volgende voorbeeld wordt een p/invoke gedefinieerd met DllImportAttribute.SetLastError de set en true wordt het gebruik gedemonstreert om GetLastPInvokeError de laatste p/invoke-fout op te halen.
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}");
}
}
Opmerkingen
De laatste aanroepfout van het platform komt overeen met de foutset door de meest recente aanroep van het platform dat is geconfigureerd met DllImportAttribute.SetLastError of true door een aanroep naar SetLastPInvokeError(Int32), afhankelijk van wat het laatst is gebeurd.
Met deze methode worden alleen fouten geretourneerd die zijn ingesteld via de genoemde scenario's. Als u de laatste systeemfout wilt ophalen, onafhankelijk van het gebruik van het aanroepen van het platform, gebruikt u GetLastSystemError.
Deze methode is functioneel gelijk aan GetLastWin32Error. Het is benoemd om de intentie van de API en de platformoverschrijdende aard beter weer te geven. GetLastPInvokeError moet de voorkeur hebben boven GetLastWin32Error.