DllImportAttribute.SetLastError Campo

Definição

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.

Aplica-se a

Ver também