Question 66

Comment donner un sens aux codes d'erreurs renvoyés par les API ?

Lorsque une erreur se produit lors de l'appel à une API, généralement celle-ci retourne un code d'erreur différent de 0. Cependant, deux cas de figures peuvent se présenter. L'API peut soit renvoyer un code qui diffère pour chaque erreur, soit renvoyer un code générique signalant simplement qu'une erreur s'est produite. Dans le deuxième cas, vous devrez alors employer l'API GetLastError qui vous permettra de connaître avec plus de précision le code de l'erreur.

Une fois que vous connaissez le code exact de l'erreur qui vient de se produire, il ne vous reste plus qu'à employer l'API FormatMessage. Cette API permet en effet de retourner le message correspondant à un code d'erreur.

Voici l'exemple d'une fonction mettant en oeuvre l'utilisation de l'API FormatMessage :

' Déclaration de l'API
Private Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA" (ByVal dwFlags As Long, lpSource As Any, ByVal dwMessageId As Long, ByVal dwLanguageId As Long, ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Long) As Long

' Déclaration des constantes
Private Const FORMAT_MESSAGE_FROM_SYSTEM As Long = &H1000
Private Const LANG_NEUTRAL = &H0

Private Function GetAPIErrorMessage(ByVal ErrCode As Long) As String

    Dim sBuffer As String ' Définit un buffer contenant le message
    Dim nBufferSize As Long ' Taille du buffer

    nBufferSize = 1024
    sBuffer = String$(nBufferSize, Chr$(0))

    nBufferSize = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, ByVal 0&, ErrCode, LANG_NEUTRAL, sBuffer, nBufferSize, ByVal 0&)

    If nBufferSize > 0 Then
        GetAPIErrorMessage = Left$(sBuffer, nBufferSize)
    ElseIf nBufferSize = 0 Then
        GetAPIErrorMessage = "Erreur " & ErrCode & " non définie."
    End If

End Function

Private Sub Form_Load()

    Const ERROR_BAD_USERNAME = 2202&

    MsgBox GetAPIErrorMessage(ERROR_BAD_USERNAME)

End Sub

Une autre solution pour retrouver la signification des erreurs renvoyées par les API est de consulter cette page de la SDK : Platform SDK: Debugging and Error Handling System Error Codes.

Date de publication : 14 juillet 2002
Dernière modification : 14 juillet 2002
Rubriques : API
Mots-clés : API, erreurs, codes, numéros, sens, messages, FormatMessage, GetLastError, valeurs retournées