Поделиться через


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 Задание поля является одним из таких случаев.

[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 Значение , чтобы указать, что вызываемый объект установит ошибку через в SetLastError Windows или errno на других платформах; в противном случае — значение false. Значение по умолчанию — false.

Если для этого поля задано значение true, маршалер среды выполнения вызывает GetLastError или errno и кэширует возвращаемое значение, чтобы предотвратить его перезапись другими вызовами API. Код ошибки можно получить, вызвав GetLastPInvokeError в .NET 6.0 и более поздних версий, GetLastWin32Error в .NET 5 и более поздних версий или в .NET Framework.

В .NET сведения об ошибке очищаются (задано значение 0) перед вызовом вызываемого объекта, если для этого поля задано значение true. В .NET Framework сведения об ошибке не очищаются. Это означает, что сведения об ошибке, возвращаемые и GetLastWin32Error в .NET, представляют только сведения об ошибке из последнего вызова p/invoke с DllImportAttribute.SetLastError параметром GetLastPInvokeError .true В .NET Framework сведения об ошибке могут сохраняться от одного p/invoke к другому.

Применяется к

См. также раздел