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