DllImportAttribute.SetLastError Campo
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Indica se o receptor define um erro (SetLastError
no Windows ou errno
em outras plataformas) antes de retornar do método atribuído.
public: bool SetLastError;
public bool SetLastError;
val mutable SetLastError : bool
Public SetLastError As Boolean
Valor do campo
Exemplos
Em alguns casos, os desenvolvedores do Visual Basic usam o DllImportAttribute, em vez de usar a Declare
instrução , para definir uma função DLL no código gerenciado. Definir o SetLastError campo é um desses casos.
[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
Comentários
true
para indicar que o receptor definirá um erro via SetLastError
no Windows ou errno
em outras plataformas; caso contrário, false
. O padrão é false
.
Se esse campo for definido true
como , o marshaler de runtime chamará GetLastError
ou errno
e armazenará em cache o valor retornado para impedir que ele seja substituído por outras chamadas à API.
Você pode recuperar o código de erro chamando GetLastPInvokeError no .NET 6.0 e superior ou GetLastWin32Error no .NET 5 e abaixo ou no .NET Framework.
No .NET, as informações de erro são limpas (definidas 0
como ) antes de invocar o receptor quando esse campo é definido true
como . No .NET Framework, as informações de erro não são limpas.
Isso significa que as informações de erro retornadas por GetLastPInvokeError e GetLastWin32Error no .NET representam apenas as informações de erro do último p/invoke com definido true
como DllImportAttribute.SetLastError . No .NET Framework, as informações de erro podem persistir de um p/invoke para o próximo.