DllImportAttribute.SetLastError 欄位
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
顯示被叫方在從該歸屬方法返回前,是否會設定錯誤(SetLastError在Windows或其他平台上為errno)。
public: bool SetLastError;
public bool SetLastError;
val mutable SetLastError : bool
Public SetLastError As Boolean
欄位值
範例
在某些情況下,Visual Basic 開發者會使用 DllImportAttribute,而非使用 Declare 陳述式,來定義受管程式碼中的 DLL 函式。 設置 SetLastError 場地就是其中之一。
[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 上以 SetLastError 或在其他平台上以 errno 設置錯誤;否則則為 false。 預設值為 false。
若此欄位設為 true,執行時的 marshaler 會呼叫 GetLastError 或 errno 並快取回傳的值,以防止被其他 API 呼叫覆蓋。
你可以在 .NET 6.0 及以上版本呼叫 GetLastPInvokeError,或在 .NET 5 或以下或 .NET Framework 上呼叫 GetLastWin32Error 來取得錯誤碼。
在.NET時,錯誤資訊會被清除(設為0),當此欄位設為true時,才會呼叫被被叫方。 在 .NET 框架中,錯誤資訊並未被清除。
這表示 GetLastPInvokeError 和 GetLastWin32Error 在 .NET 回傳的錯誤資訊,僅代表最後一次 p/invoke 的錯誤資訊,且 DllImportAttribute.SetLastError 設為 true。 在 .NET Framework 中,錯誤資訊可能會從一個 p/invoke 持續存在到下一個。