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 :

MinGw 32 v4.8.1 et fonction msdn RegOpenCurrentUser


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    aucun
    Inscrit en
    Octobre 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2009
    Messages : 98
    Points : 71
    Points
    71
    Par défaut MinGw 32 v4.8.1 et fonction msdn RegOpenCurrentUser
    Bonjour,

    Je viens de télécharger la dernière version du compilateur MinGW 32 bits ici et je développe un petit programme qui utilise les fonctions Windows dont voici un bout de code :

    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
    char * registry_current_user_key_search(char *subkey, char *value, int version_windows)
    {
       HKEY current_key;
       char buffer[256];
       char *data = NULL;
       DWORD size = sizeof(buffer),
             result;
     
       buffer[0] = '\0';
     
       result = RegOpenCurrentUser(KEY_READ, &current_key);
       if(result != ERROR_SUCCESS)
         {
            printf("RegOpenCurrentUser error : %ld\n", GetLastError());
            return data;
         }
     
       result = RegGetValue(current_key, subkey, value, RRF_RT_ANY, NULL, &buffer, &size);
       if(result != ERROR_SUCCESS)
         {
            printf("RegGetValue error : %ld\n", result);
            goto my_errors;
         }
     
       data = strdup(buffer);
     
       RegCloseKey(current_key);
     
       printf("Valeur de data : %s\n", data);
     
       return data;
     
    my_errors:
       RegCloseKey(current_key);
       return data;
    }
    Et j'ai cette erreur de compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ||=== Build: MinGW 32 in GestionBaseRegistre (compiler: MinGw 32) ===|
    M:\Test c\GestionBaseRegistre\main.c||In function 'registry_current_user_key_search':|
    M:\Test c\GestionBaseRegistre\main.c|383|warning: implicit declaration of function 'RegOpenCurrentUser' [-Wimplicit-function-declaration]|
    M:\Test c\GestionBaseRegistre\main.c|390|warning: implicit declaration of function 'RegGetValue' [-Wimplicit-function-declaration]|
    M:\Test c\GestionBaseRegistre\main.c|390|error: 'RRF_RT_ANY' undeclared (first use in this function)|
    M:\Test c\GestionBaseRegistre\main.c|390|note: each undeclared identifier is reported only once for each function it appears in|
    ||=== Build failed: 1 error(s), 2 warning(s) (0 minute(s), 6 second(s)) ===|
    Cette erreur semble logique puisque la fonction RegOpenCurrentUser n'est pas dans le fichier winreg.h de MinGW 32 bits...
    Du coup j'aimerai savoir si vous vous êtes confrontés à ce même type de problème et quelle est le compilateur que vous utilisez ?

    Merci par avance.

    PS: j'utilise RegOpenCurrentUser car j'ai un programme qui est lancé via un service.

  2. #2
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Uuuuuuh... tu as déjà réussi à utiliser des fonctions MS avec MinGW32 ?
    Pas sûr que ce soit fait pour ! :s

    Sans Visual Studio, je doute grandement que "heapalloc" et tous ses copains au dessus soient dispos... mais je peux me tromper.
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  3. #3
    Membre régulier
    Profil pro
    aucun
    Inscrit en
    Octobre 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2009
    Messages : 98
    Points : 71
    Points
    71
    Par défaut
    Bonjour Metalman,

    Certaines fonctions msdn sont bien disponibles dans MinGw que l'on peut télécharger via le lien que j'ai donné
    Par exemple "heapalloc" est disponible dans le header "winbase.h" que l'on trouve dans "MinGW\include". Des fonctions de gestion de registre sont disponibles dans le header "winreg.h" que l'on trouve aussi dans "MinGW\include".

  4. #4
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Ah, dans ce cas, désolé d'avoir douté !

    Ce qui est bizarre c'est qu'il ne dit rien sur RegCloseKey...
    Il n'y a pas d'équivalent à RegOpen et RegGetValue dans le winbase.h ?
    Voire, il n'y a pas d'autre .h "windozien" ?

    Essaye à tout hasard, si tu le peux, de compiler avec tinycc !
    En fouinant je suis tombé là dessus : http://code.ohloh.net/file?fid=cR-HC...lected=true#L0
    TinyCC semble gérer cela...

    OK, changer de compilo est rarement la bonne solution... mais au moins pour voir si ton code peut compiler quelque part ça serait bien ! :s
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ce n'est pas un problème de compilo, mais de SDK: Le SDK de MinGW (fichiers d'en-tête + libs statiques d'importation dans un format que GCC accepte) est connu pour être incomplet.

    J'ai bien peur que la seule solution sous MinGW soit de passer par LoadLibrary()+GetProcAddress()...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre régulier
    Profil pro
    aucun
    Inscrit en
    Octobre 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2009
    Messages : 98
    Points : 71
    Points
    71
    Par défaut
    Bonjour à tous les deux,

    Merci pour vos réponses.

    Entre temps j'ai trouvé une solution pour que mon programme fonctionne en mode classique et en mode service. J'utilise des fonctions présentes dans winreg.h (RegCreateKeyEx et RegQueryValueEx), la différence vient de la clé que je vais lire dans la base de registre. Au lieu d'aller dans HKEY_CURRENT_USER je vais dans HKEY_USERS\.DEFAULT et le tour est joué

    Je garde tinygcc sous le coude

    Au plaisir,
    Sango.

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Réponses: 3
    Dernier message: 05/11/2006, 13h19
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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