DllImportAttribute.SetLastError Campo
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Indica se o chamado define um erro (SetLastError em Windows ou errno noutras plataformas) antes de regressar do método atribuído.
public: bool SetLastError;
public bool SetLastError;
val mutable SetLastError : bool
Public SetLastError As Boolean
Valor de Campo
Exemplos
Em alguns casos, Visual Basic programadores usam a DllImportAttribute, em vez da instrução Declare, para definir uma função DLL em código gerido. 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
Observações
true para indicar que o chamado irá definir um erro via SetLastError em Windows ou errno noutras plataformas; caso contrário, false. A predefinição é false.
Se este campo for definido para true, o marshaler em tempo de execução chama GetLastError ou errno e armazena em cache o valor devolvido para evitar que seja sobrescrito por outras chamadas de API.
Pode obter o código de erro chamando GetLastPInvokeError em .NET 6.0 e superiores ou GetLastWin32Error em .NET 5 e abaixo ou .NET Framework.
No .NET, a informação de erro é apagada (definida para 0) antes de ser invocada a pessoa chamada quando este campo está definido para true. No .NET Framework, a informação de erro não é apagada.
Isto significa que a informação de erro devolvida por GetLastPInvokeError e GetLastWin32Error em .NET representa apenas a informação de erro do último p/invoke, com DllImportAttribute.SetLastError definida para true. No .NET Framework, a informação de erro pode persistir de um p/invoke para o seguinte.