IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

__stdcall__ & GetTypeDrive


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut __stdcall__ & GetTypeDrive
    Bonjour,

    J'ai une erreur après compilation du code suivant :

    ERREUR : [Warning] `__stdcall__' attribute only applies to function types

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
     
    #include <windows.h>
    #include <Winbase.h>
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (void)
    {
     
        FILE *STREAM=fopen("out.txt","w");
     
        UINT WINAPI ReturnedCode = ReturnedCode=GetDriveType( "E:\\" );
     
        switch ( ReturnedCode )
               {
     
                     case DRIVE_UNKNOWN    :
                                                 fprintf( STREAM, "The drive type cannot be determined." );
                                                 break; 
     
                     case DRIVE_NO_ROOT_DIR:
                                                  fprintf( STREAM, "The root path is invalid; for example, there is no volume mounted at the specified path." );
                                                  break; 
     
                     case DRIVE_REMOVABLE  :
                                                  fprintf( STREAM, "The drive has removable media; for example, a floppy drive, thumb drive, or flash card reader." );
                                                  break; 
     
                     case DRIVE_FIXED      :
                                                  fprintf( STREAM, "The drive has fixed media; for example, a hard drive or flash drive." );
                                                  break; 
     
                     case DRIVE_REMOTE     :
                                                  fprintf( STREAM, "The drive is a remote (network) drive." );
                                                  break; 
     
                     case DRIVE_CDROM      :
                                                  fprintf( STREAM, "The drive is a CD-ROM drive." );
                                                  break; 
     
                     case DRIVE_RAMDISK    :
                                                  fprintf( STREAM, "The drive is a RAM disk." );
                                                  break; 
     
                     default               :
                                                  fprintf( STREAM, "Unexpected error" );
                                                  break; 
     
             }
     
    }
    Lien msdn de la fonction : http://msdn.microsoft.com/en-us/libr...39(VS.85).aspx

    Merci d'avance.

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Que fait le WINAPI dans cette ligne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UINT WINAPI ReturnedCode=GetDriveType( "E:\\" );
    Cela ne fonctionne-t-il pas mieux ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UINT ReturnedCode=GetDriveType( "E:\\" );

  3. #3
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Je te remercie, je n'ai plus le warning.

    Pour comprendre, j'aimerais savoir pourquoi la msdn donne le WINAPI pour la déclaration et pourquoi cela me genère un warning ? Il me manque une dll ou quelque chose du genre ? même si en l'enlevant je n'ai plus l'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    #include <windows.h>
    #include <Winbase.h>
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (void)
    {
     
        FILE *STREAM=fopen("out.txt","w");
     
        UINT ReturnedCode = ReturnedCode=GetDriveType( "c:\\" );
     
        switch ( ReturnedCode )
               {
     
                     case DRIVE_UNKNOWN    :
                                                 fprintf( STREAM, "The drive type cannot be determined." );
                                                 break; 
     
                     case DRIVE_NO_ROOT_DIR:
                                                  fprintf( STREAM, "The root path is invalid; for example, there is no volume mounted at the specified path." );
                                                  break; 
     
                     case DRIVE_REMOVABLE  :
                                                  fprintf( STREAM, "The drive has removable media; for example, a floppy drive, thumb drive, or flash card reader." );
                                                  break; 
     
                     case DRIVE_FIXED      :
                                                  fprintf( STREAM, "The drive has fixed media; for example, a hard drive or flash drive." );
                                                  break; 
     
                     case DRIVE_REMOTE     :
                                                  fprintf( STREAM, "The drive is a remote (network) drive." );
                                                  break; 
     
                     case DRIVE_CDROM      :
                                                  fprintf( STREAM, "The drive is a CD-ROM drive." );
                                                  break; 
     
                     case DRIVE_RAMDISK    :
                                                  fprintf( STREAM, "The drive is a RAM disk." );
                                                  break; 
     
                     default               :
                                                  fprintf( STREAM, "Unexpected error" );
                                                  break; 
     
             }
     
    }

  4. #4
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Le WINAPI c'est pour spécifier le type d'appel à la fonction (__stdcall). Toute les API win32 on se type d'appel à ma connaissance. De base le type d'appel du C est __cdecl je crois. Le type d'appel de la fonction est a spécifier uniquement au moment de la déclaration et la définition de la fonction et non lors de l'appel.

    Si tu veux la liste precise des differences qui existe quand on appel un fonction avec __stdcall ou __cdecl regarde les liens suivants:
    http://msdn.microsoft.com/en-us/libr...93(VS.71).aspx
    http://msdn.microsoft.com/en-us/libr...ks(VS.71).aspx
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Ce WINAPI provient du fichier include. C'est une redéfinition de __stdcall__

    Il indique au compilateur que la convention d'appel de cette fonction est __stdcall__ pour que le compilateur empile les paramètres d'appel dans le bon ordre (celui attendu par la fonction)

    Voir ici pour les différentes conventions d'appel : http://msdn.microsoft.com/en-us/libr...58(VS.71).aspx

    [EDIT] Grillé
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo