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 chybu posledního volá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í platforma vyvolá chybu.
Příklady
Následující příklad definuje p/invoke s nastaveným DllImportAttribute.SetLastError na true
a demonstruje použití GetLastPInvokeError k získání poslední chyby 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 volání platformy odpovídá chybě nastavenému nejnovějším voláním platformy nakonfigurovaným DllImportAttribute.SetLastError na hodnotu nebo true
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 GetLastWin32Error. Má název, aby lépe odrážel záměr rozhraní API a jeho multiplatformní povahu. GetLastPInvokeError by měla být upřednostněná před GetLastWin32Error.
Platí pro
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro