Marshal.GetLastPInvokeError Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Dapatkan kesalahan pemanggilan platform terakhir pada utas saat ini.
public:
static int GetLastPInvokeError();
public static int GetLastPInvokeError ();
static member GetLastPInvokeError : unit -> int
Public Shared Function GetLastPInvokeError () As Integer
Mengembalikan
Platform terakhir memanggil kesalahan.
Contoh
Contoh berikut mendefinisikan p/invoke dengan DllImportAttribute.SetLastError diatur ke true
dan menunjukkan penggunaan GetLastPInvokeError untuk mendapatkan kesalahan p/invoke terakhir.
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}");
}
}
Keterangan
Kesalahan pemanggilan platform terakhir sesuai dengan kesalahan yang ditetapkan baik oleh pemanggilan platform terbaru yang dikonfigurasi dengan DllImportAttribute.SetLastError diatur ke true
atau oleh panggilan ke SetLastPInvokeError(Int32), mana pun yang terakhir terjadi.
Metode ini hanya akan mengembalikan kesalahan yang ditetapkan melalui skenario yang disebutkan. Untuk mendapatkan kesalahan sistem terakhir yang independen dari penggunaan pemanggilan platform, gunakan GetLastSystemError.
Metode ini secara fungsional setara GetLastWin32Errordengan . Ini dinamai untuk lebih mencerminkan niat API dan sifat lintas platformnya. GetLastPInvokeError harus lebih disukai daripada GetLastWin32Error.