DllImportAttribute.SetLastError フィールド

定義

属性付きメソッドから戻る前に、呼び出し先がエラー (Windows で SetLastError または他のプラットフォームで errno) を設定するかどうかを示します。

public: bool SetLastError;
public bool SetLastError;
val mutable SetLastError : bool
Public SetLastError As Boolean 

フィールド値

場合によっては、Visual Basic開発者は、マネージド コードで DLL 関数を定義するために、Declare ステートメントではなく、DllImportAttribute を使用します。 SetLastErrorフィールドの設定は、そのようなケースの 1 つです。

[DllImport("user32.dll", SetLastError = true)]
int MessageBoxA(IntPtr hWnd, String^ Text,
    String^ Caption, unsigned int Type);
internal static class NativeMethods
{
    [DllImport("user32.dll", SetLastError = true)]
    internal static extern int MessageBoxA(
        IntPtr hWnd, string lpText, string lpCaption, uint uType);
}
Friend Class NativeMethods
    <DllImport("user32.dll", SetLastError:=True)>
    Friend Shared Function MessageBoxA(hWnd As IntPtr, lpText As String,
        lpCaption As String, uType As UInteger) As Integer
    End Function
End Class

注釈

true:呼び出し先が他のプラットフォームで Windows または errnoSetLastError を介してエラーを設定することを示します。それ以外の場合は、false。 既定値は false です。

このフィールドが true に設定されている場合、ランタイム マーシャラーは GetLastError または errno を呼び出し、返された値をキャッシュして、他の API 呼び出しによって上書きされないようにします。 エラー コードは、.NET 6.0 以降で GetLastPInvokeError を呼び出すか、.NET 5 以降または .NET Framework で GetLastWin32Error を呼び出すことによって取得できます。

.NETでは、このフィールドが true に設定されている場合、呼び出し先を呼び出す前にエラー情報がクリアされます (0 に設定)。 .NET Framework では、エラー情報はクリアされません。 つまり、.NET の GetLastPInvokeError および GetLastWin32Error によって返されるエラー情報は、DllImportAttribute.SetLastErrortrue に設定された最後の p/呼び出しからのエラー情報のみを表します。 .NET Framework では、エラー情報は 1 つの p/呼び出しから次の呼び出しまで保持できます。

適用対象

こちらもご覧ください