Marshal.GetLastPInvokeError Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získejte poslední chybu vyvolání platformy v aktuálním vlákně.
public:
static int GetLastPInvokeError();
public static int GetLastPInvokeError ();
static member GetLastPInvokeError : unit -> int
Public Shared Function GetLastPInvokeError () As Integer
Návraty
Poslední chyba volání platformy.
Příklady
Následující příklad definuje volání p/s nastaveným DllImportAttribute.SetLastError na true
a ukazuje použití GetLastPInvokeError k získání poslední chyby volání 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}");
}
}
Poznámky
Poslední chyba vyvolání platformy odpovídá chybě nastavené buď nejnovějším voláním platformy nakonfigurovaným DllImportAttribute.SetLastError na hodnotu , true
nebo voláním SetLastPInvokeError(Int32), podle toho, co se stalo naposledy.
Tato metoda vrátí pouze chyby nastavené prostřednictvím uvedených scénářů. Pokud chcete získat poslední systémovou chybu nezávisle na využití volání platformy, použijte GetLastSystemError.
Tato metoda je funkčně ekvivalentní k GetLastWin32Errormetodě . Má název, aby lépe odrážel záměr rozhraní API a jeho povahu pro různé platformy. GetLastPInvokeError by měla být upřednostněná před GetLastWin32Error.