DllImportAttribute.SetLastError Champ
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Indique si l’appelé définit une erreur (SetLastError
sur Windows ou errno
sur d’autres plateformes) avant de retourner à partir de la méthode avec attributs.
public: bool SetLastError;
public bool SetLastError;
val mutable SetLastError : bool
Public SetLastError As Boolean
Valeur de champ
Exemples
Dans certains cas, les développeurs Visual Basic utilisent l’instruction DllImportAttribute, au lieu d’utiliser l’instruction Declare
, pour définir une fonction DLL dans le code managé. La définition du SetLastError champ est l’un de ces cas.
[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
Remarques
true
pour indiquer que l’appelé définit une erreur via SetLastError
sur Windows ou errno
sur d’autres plateformes ; sinon, false
. Par défaut, il s’agit de false
.
Si ce champ est défini sur true
, le marshaleur d’exécution appelle GetLastError
ou errno
et met en cache la valeur retournée pour empêcher son remplacement par d’autres appels d’API.
Vous pouvez récupérer le code d’erreur en appelant GetLastPInvokeError sur .NET 6.0 et versions ultérieures ou GetLastWin32Error sur .NET 5 et versions antérieures ou .NET Framework.
Sur .NET, les informations d’erreur sont effacées (définie sur 0
) avant d’appeler l’appelé lorsque ce champ a la valeur true
. Sur .NET Framework, les informations d’erreur ne sont pas effacées.
Cela signifie que les informations d’erreur retournées par GetLastPInvokeError et GetLastWin32Error sur .NET représentent uniquement les informations d’erreur du dernier p/invoke avec DllImportAttribute.SetLastError la valeur true
. Sur .NET Framework, les informations sur l’erreur peuvent être conservées d’un p/invoke à l’autre.