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 :

Problème conversion const char *


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Problème conversion const char *
    Bonjour, bonsoir

    Je me prends la tête depuis des heures avec un problème de conversion.

    J'écris un programme avec Embedded visual c++ qui tourne sous win ce.net.

    Le programme dialogue avec une appli (en vb6) sur un PC via active sync et winsock.

    coté win ce.net j'utilise :

    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
    #include ....
     
    char s_in[] = "";
    ...
     
    void connexion();
     
    {
    char s_in[]="pc_bureau";
     
     if ((phostent = gethostbyname (s_in)) == NULL) 
     
    ...
    ...
     
    }
    De cette manière ça fonctionne.

    Par contre, "pc_bureau" étant le nom de mon PC, j'anticipe que sur une machine nommée autrement, évidemment ça ne fonctionnera plus.

    Du coup, l'appli sur le PC écrit dans la base de registre de win.ce (avec CreateCERegistryKeys) le nom du PC et l'appli de win.ce récupère la clef avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void lit_reg();
    {
     
    HKEY pref_key ;
    DWORD dummy0, dummy1=256 ;
     
    	 if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, TEXT ("servername\\MySubKey"), 0, 0, &pref_key) != ERROR_SUCCESS)
    		return ;
    	  RegQueryValueEx (pref_key, TEXT ("computname"), NULL, &dummy0,
    		(LPBYTE) s_in, &dummy1) ;
     
    }
    Le problème est que dans ce cas "s_in" ne passe pas dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if ((phostent = gethostbyname (s_in)) == NULL)
    Aucune erreur à la compilation, mais l'appli ne trouve pas le serveur. Je suis certain que la clef est bien lu.

    ça doit être un problème de conversion, "gethostbyname" attend un "const char *"

    Du coup, comment faire pour convertir la clef de le BDR en const char * ?

    Merci d'avoir pris le temps de me lire.

  2. #2
    screetch
    Invité(e)
    Par défaut
    je dirai que tu compiles ton programme en unicode, la valeur retournée par QueryValueEx est donc une chaine Unicode. essaye d'appeler QueryValueExA pour forcer la chaine ASCII.
    (du coup n'oublie pas de changer le nom de la clé en ASCII aussi)

  3. #3
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Citation Envoyé par screetch Voir le message
    je dirai que tu compiles ton programme en unicode, la valeur retournée par QueryValueEx est donc une chaine Unicode. essaye d'appeler QueryValueExA pour forcer la chaine ASCII.
    Oula non, c'est pas un très bonne idée ça, en règle général Wince = Unicode uniquement. D'ailleurs la plupart du temps les versions ANSI des fonctions de l'API win32 ne sont même pas implémentées et plante au link.

    Autoz, il faut que tu donnes à RegQueryValueEx() un buffer de WCHAR puis que tu convertisses vers des CHAR en recopiant ce buffer dans ton tableau de char s_in avec la fonction WideCharToMultiByte.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Arzar Voir le message
    Oula non, c'est pas un très bonne idée ça, en règle général Wince = Unicode uniquement. D'ailleurs la plupart du temps les versions ANSI des fonctions de l'API win32 ne sont même pas implémentées et plante au link.

    Autoz, il faut que tu donnes à RegQueryValueEx() un buffer de WCHAR puis que tu convertisses vers des CHAR en recopiant ce buffer dans ton tableau de char s_in avec la fonction WideCharToMultiByte.
    Merci à screetch, mais j'obtiens

    'RegOpenKeyExA' : cannot convert parameter 2 from 'unsigned short [20]' to 'const char *'


    Arzar, je vais tester demain matin cette fonction WideCharToMultiByte et je reviens vous dire ce que cela donne

    Bonne soirée et merci pour l'aide.

  5. #5
    screetch
    Invité(e)
    Par défaut
    quand on lit un truc il faut lire jusqu'au bout ^^
    (du coup n'oublie pas de changer le nom de la clé en ASCII aussi)
    RegOpenKeyExA (HKEY_LOCAL_MACHINE, "servername\\MySubKey", 0, 0, &pref_key) != ERROR_SUCCESSsinon, effectivement, on dirait que cette fonction ne fait pas partie de l'api sous wince

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par screetch Voir le message
    quand on lit un truc il faut lire jusqu'au bout ^^

    RegOpenKeyExA (HKEY_LOCAL_MACHINE, "servername\\MySubKey", 0, 0, &pref_key) != ERROR_SUCCESSsinon, effectivement, on dirait que cette fonction ne fait pas partie de l'api sous wince
    En tout cas, WideCharToMultiByte résout le problème. Merci pour le coup de main.

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

Discussions similaires

  1. conversion const char* en string
    Par nahoula1231 dans le forum C++
    Réponses: 4
    Dernier message: 27/02/2013, 19h50
  2. Problème conversion de char à char*
    Par nikobordx dans le forum C
    Réponses: 8
    Dernier message: 31/10/2012, 21h16
  3. Réponses: 7
    Dernier message: 06/04/2011, 16h54
  4. Conversion const char* vers std::string
    Par scheme dans le forum C++
    Réponses: 4
    Dernier message: 21/09/2010, 11h02
  5. problème avec const char * et #define macro
    Par CodeurNé dans le forum C
    Réponses: 5
    Dernier message: 20/09/2006, 21h25

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