DllImportAttribute.SetLastError フィールド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
属性付きメソッドから戻る前に、呼び出し先がエラー (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 または errno で SetLastError を介してエラーを設定することを示します。それ以外の場合は、false。 既定値は false です。
このフィールドが true に設定されている場合、ランタイム マーシャラーは GetLastError または errno を呼び出し、返された値をキャッシュして、他の API 呼び出しによって上書きされないようにします。
エラー コードは、.NET 6.0 以降で GetLastPInvokeError を呼び出すか、.NET 5 以降または .NET Framework で GetLastWin32Error を呼び出すことによって取得できます。
.NETでは、このフィールドが true に設定されている場合、呼び出し先を呼び出す前にエラー情報がクリアされます (0 に設定)。 .NET Framework では、エラー情報はクリアされません。
つまり、.NET の GetLastPInvokeError および GetLastWin32Error によって返されるエラー情報は、DllImportAttribute.SetLastError が true に設定された最後の p/呼び出しからのエラー情報のみを表します。 .NET Framework では、エラー情報は 1 つの p/呼び出しから次の呼び出しまで保持できます。