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 :

Conversions de chaines en pointeurs LPCSTR


Sujet :

C++

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut Conversions de chaines en pointeurs LPCSTR
    Bonjour,

    Je suis perdu entre tous les types de C++.
    j'aimerais utiliser la boite de dialogue MessageBox() qui attends un parametre de type LPCSTR.
    En me renseignant, j'ai vu que c'était un pointeur de chaine (ils ne peuvent pas mettre *chaine &chaine comme tout le monde !!!).

    Selon plusieurs exemples, j'ai vu qu'on pouvait faire _T("Test") et c'etait bon...
    Seulement moi, j'aimerais pouvoir travailler cette chaine:
    char temp[10] ="";
    sprintf(temp,"%d",wmId);
    MessageBox(hWnd,_T("Info"),_T(test),MB_OK);

    Seulement, ça... Ca ne marche pas, il me met: error C2065: 'Ltemp' : undeclared identifier.

    Comment ça marche ?

  2. #2
    Membre du Club Avatar de Seandest
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Avril 2006
    Messages : 54
    Points : 67
    Points
    67
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char Temp[10];
     
    sprintf(Temp, "%d", 132546);
    MessageBox(Temp, NULL, NULL);
    Normalement là t'as pas de souci.

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Utiliser sprintf en C++, c'est pas la bonne méthode. On utilise de préférence les stringstream - comme écrit dans la FAQ - ou si on montre que c'est le goulot d'étranglement de l'appli, on envisage de le remplacer par un sprintnf.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ne t'embête pas avec les types du genre LPCWSTR, ou les macros du genre _T, si tu ne travailles pas en unicode.

    MessageBox acceptera très bien ton char*.

  5. #5
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour Seandest,
    Ta méthode ne marche pas... error C2660: 'MessageBoxW' : function does not take 3 parameters
    J'utilise embedded, il n'y a pas l'air d'avoir de surchage ou quoi que ce soit !

    Bonjour Miles,
    C'est vrai que je sort du C, j'ai du prendre de mauvaises habitude...
    Peux tu me donner un exemple STP ?

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ta méthode ne marche pas... error C2660: 'MessageBoxW' : function does not take 3 parameters
    Là tu es en unicode... Si tu n'en veux pas désactive-le, sinon il faudra utiliser des types et fonctions différents dès que tu voudras manipuler les chaînes de caractères.

    C'est vrai que je sort du C, j'ai du prendre de mauvaises habitude...
    Peux tu me donner un exemple STP ?
    Tout est dans la

  7. #7
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour Laurent Gomila,

    Fiouf, Quelle rapidité dans vos réponses !!!

    Je viens de faire:
    char temp[10] = "Hello";
    MessageBox(hWnd,_T("Info"),temp,MB_OK);

    Et il me met: error C2664: 'MessageBoxW' : cannot convert parameter 3 from 'char [10]' to 'const unsigned short *'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

    Je croit que je vais crier... Je suis dessus depuis plus de deux heures !!!
    Quand à la FAQ, je l'ai retourné dans tous les sens !
    En fait, je ne sais même pas dans quel type de C++ je me trouve...

  8. #8
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Unicode ???
    Qu'est ce que c'est que ça ?
    Et comment on le désactive ?

    Mais j'aurais malgré tout aimé comprendre ce qui m'arrivait !

  9. #9
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Unicode est une norme de codage des caractères sur 2 byte ce qui permet de représenter la plupart des alphabets du monde.

  10. #10
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Ok,

    Bon, je m'en passerais bien...
    J'ai fouillé dans tous les menus mais rien n'y fait référence.

    J'ai créé un projet dans embedded C++ 4 avec tout par défaut moi !

  11. #11
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Appelle MessageBoxA une fois

  12. #12
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour Miles,

    Dans Projet option, jai la chaine:
    /l 0x409 /fo"ARMV4IDbg/PpcC_Ps2Com2.res" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "$(CePlatform)" /d "THUMB" /d "_THUMB_" /d "ARM" /d "_ARM_" /d "ARMV4I" /r

    Faut que je retire: "UNICODE" /d "_UNICODE" /d ?

    Pourquoi tout est en double ?

  13. #13
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    J'ai fait:
    MessageBoxA(hWnd,_T("Info"),temp,MB_OK);

    C'est la même chose:
    error C2664: 'MessageBoxA' : cannot convert parameter 2 from 'unsigned short [5]' to 'const char *'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

  14. #14
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Maintenant c'est la première chaîne qui a été mise en unicode qui doit être réécrite autrement.
    Effectivement, enlève le UNICODE et remet MessageBox tout court

  15. #15
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    C'est fait,

    Il a bien prit les changement en compte, j'ai eu un message.
    MessageBox(temp, NULL, NULL);
    et
    MessageBox(hWnd,_T("Info"),temp,MB_OK);
    Ne passent toujours pas:
    error C2660: 'MessageBoxW' : function does not take 3 parameters
    error C2664: 'MessageBoxW' : cannot convert parameter 3 from 'char [10]' to 'const unsigned short *'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

    Je vais à la recherche d'autres: "unicode" éventuels !

  16. #16
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Il y en a d'autres dans processor définitions;:
    DEBUG,ARM,_ARM_,ARMV4I,UNDER_CE=$(CEVersion),_WIN32_WCE=$(CEVersion),$(CePlatform),UNICODE,_UNICODE

    Mais il y en a sur chaque feuilles, j'ai peur de faire des conneries !

    Par contre, dans source file option, j'ai:
    Project Settings, and not /D "UNICODE"/D "_UNICODE"

  17. #17
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bin la, c'est le ponpon !

    J'ai enlevé UNICODE,_UNICODE des fichiers CPP et j'ai des nouvelles erreurs:
    error C2731: 'WinMain' : function cannot be overloaded

  18. #18
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il t'avait certainement créé un WinMain version Unicode. Morale : la prochaine fois que tu génères un projet C++, assure-toi bien de décocher l'option UNICODE, ou débrouille-toi pour que Visual Studio te laisse le projet vide

  19. #19
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Normal si tu as mis des paramètres unicode à WinMAin alors qu'elle n'en a pas !

  20. #20
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bin oui:
    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
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow) {
    	MSG msg;
    	HACCEL hAccelTable;
     
    	// Perform application initialization:
    	if (!InitInstance (hInstance,nCmdShow)) { return FALSE;	}
     
    	hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_PPCC_PS2COM2);
     
    	// Main message loop:
    	while (GetMessage(&msg, NULL, 0, 0)) {
    		if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) {
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    	}
     
    	return msg.wParam;
    }
    Sauf que ce n'est pas moi qui les ait mis, c'est embedded, lors de la création d'un nouveau projet !

    Bon, j'enleve, on va voir mais c'est des paramètres qu'il utilise dans le corps de la fonction, ça va pêter !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Conversion de type de pointeur
    Par didierl dans le forum C
    Réponses: 8
    Dernier message: 13/09/2006, 08h17
  2. [C#] Conversion de chaine
    Par Nico28 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/07/2006, 13h03
  3. conversion une chaine numérique en lettre
    Par nazimb dans le forum ASP
    Réponses: 1
    Dernier message: 20/11/2005, 17h39
  4. conversion datetime-chaine de caracteres
    Par HULK dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/08/2005, 13h26
  5. Chaines et pointeurs mais pas "const"
    Par hpfx dans le forum C
    Réponses: 9
    Dernier message: 05/10/2003, 20h23

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