DllImportAttribute.SetLastError Поле

Определение

указывает, задает ли вызываемый объект ошибку ( SetLastError на Windows или errno на других платформах) перед возвратом из метода с атрибутом.

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

Значение поля

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 сведения об ошибке не удаляются. Это означает, что сведения об ошибках, возвращаемые GetLastPInvokeError и GetLastWin32Error в .NET, представляют только сведения об ошибке из последнего p/Invoke с параметром, равным DllImportAttribute.SetLastError true . на платформа .NET Framework сведения об ошибке можно сохранить из одного p/invoke в следующий.

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

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