Marshal.GetLastPInvokeError 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得目前線程上最後一個平臺叫用錯誤。
public:
static int GetLastPInvokeError();
public static int GetLastPInvokeError ();
static member GetLastPInvokeError : unit -> int
Public Shared Function GetLastPInvokeError () As Integer
傳回
最後一個平臺叫用錯誤。
範例
下列範例會定義設定為 true
的 DllImportAttribute.SetLastError p/invoke,並示範如何使用 GetLastPInvokeError 來取得最後一個 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}");
}
}
備註
最後一個SetLastPInvokeError(Int32)平臺叫用錯誤會對應至最近使用 設定true
為 或呼叫 所設定的最新平台調用所設定DllImportAttribute.SetLastError的錯誤集,不論上次發生。
這個方法只會透過提及的案例傳回設定的錯誤。 若要取得與平臺叫用使用量無關的最後一個系統錯誤,請使用 GetLastSystemError。
這個方法的功能相當於 GetLastWin32Error。 其命名目的是要更清楚地反映 API 的意圖及其跨平台本質。 GetLastPInvokeError 應該優先於 GetLastWin32Error。