Marshal.GetLastPInvokeError メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
現在のスレッドで最後のプラットフォーム呼び出しエラーを取得します。
public:
static int GetLastPInvokeError();
public static int GetLastPInvokeError ();
static member GetLastPInvokeError : unit -> int
Public Shared Function GetLastPInvokeError () As Integer
戻り値
最後のプラットフォーム呼び出しエラー。
例
次の例では、 を に設定して p/invoke DllImportAttribute.SetLastError を true
定義し、 を使用して 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}");
}
}
注釈
最後のプラットフォーム呼び出しエラーは、 を に設定して構成 DllImportAttribute.SetLastError された最新のプラットフォーム呼び出しまたは の呼び出しによって設定 true
されたエラーに対応します。最後に SetLastPInvokeError(Int32)発生したエラーです。
このメソッドは、前述のシナリオによって設定されたエラーのみを返します。 プラットフォーム呼び出しの使用に関係なく、最後のシステム エラーを取得するには、 を使用 GetLastSystemErrorします。
このメソッドは、機能的には と GetLastWin32Error同等です。 API の意図とそのクロスプラットフォームの性質をより適切に反映するようにという名前が付けられています。 GetLastPInvokeError より優先される GetLastWin32Error必要があります。
適用対象
.NET