次の方法で共有


DllImportAttribute.SetLastError フィールド

定義

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

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

フィールド値

場合によっては、Visual Basic 開発者は DllImportAttribute、 ステートメントを使用する代わりに を使用 Declare して、マネージ コードで DLL 関数を定義します。 フィールドの 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 またはerrno他のプラットフォームで エラーをSetLastError設定することを示す場合は 。それ以外の場合falseは 。 既定では、 falseです。

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

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

適用対象

こちらもご覧ください