Bagikan melalui


Marshal.GetLastPInvokeError Metode

Definisi

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.

Berlaku untuk