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 к другому.