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

MFC Discussion :

Visual C++ Embedded - Chaines de caractères


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Par défaut Visual C++ Embedded - Chaines de caractères
    Bonjour,

    Je ne sais si c'est ici que je dois mettre mes messages sur cette techno mais je n'ai pas vraiment trouvé le lieux approprié ... J espère donc que qqn pourra déplacer mon message s'il le faut.

    Voilà, j ai un programme qu il faut que je passe de VC++ à eVC++.
    Mais j ai un souci car eVC ne reconnait pas certaines bibliothèques classiques de VC++. Par exemple à la compile, il me gigle dès que j'utilise :
    - AppendChar
    - Trim

    J'ai des souci aussi avec
    - MakeUpper
    - Format

    Quelqu un serait il où je pourrai trouver des équivalents ???

    Merci d avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Par défaut
    Personne pour me renseigner ?
    Est ce le forum le mieux adapté ?

  3. #3
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    essaye d'être plus précis ...
    AppendChar connait pas, c'est quoi une méthode quelle classe ? une fonction ?
    Trim pareil ...
    J'ai des souci aussi avec
    - MakeUpper
    - Format
    ne nous renseigne pas vraiment sur le probléme...
    il ne faut pas s'étonner si personne ne se donne la peine de répondre..

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Par défaut
    Désolée .. .

    Bon en fait les méthodes énoncées ci-dessus sont des méthodes de la classe CString.
    Sous VC++ ou eVC++, j'ai un code du genre :
    strTmp2.Format("%d",VDE_);
    Avec strTmp2 de type CString
    VDE_ un int.

    Mais sous eVC++ il me sort l'erreur suivante :
    cdecl CString::Format(const unsigned short *,...)' : cannot convert parameter 1 from 'char [3]' to 'const unsigned short *'

    Pourtant quand je tape la ligne, l'aide contextuelle me donne bien les même types d'arguments pour la fonction que l'on soit sur eVC++ ou VC++.
    Je ne comprends pas pourquoi cette erreur ...

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    sous evc tu es en Unicode de base ,tu dois donc utiliser la macro appropriée (_T("")) pour spécifier les chaines de caractéres...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strTmp2.Format(_T("%d"),VDE_);

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Par défaut
    Bon alors je m'en suis sortie avec Format ...
    En fait sous eVC++, il faut mettre des simple quote au lieux des doubles ... Et ça passe (tout du moins à la compil j ai plus d erreur !).
    J'ai vu ton message après FarScape ... Effectivement ta méthode fonctionne. Merci beaucoup

    Par contre, j'ai toujours un souci avec strCmp. Enfin avec les paramètres que j'ai dans cette fonction. En effet, strcmp est défini ainsi :
    int __cdecl strcmp(const char *, const char *);
    Or dans mon code en VC++, mon second paramètre qui est un CString ne pause pas de pb lors de la compilation malgré la définition alors qu en eVC j'ai une erreur :
    error C2664: 'strcmp' : cannot convert parameter 2 from 'class CString' to 'const char *'
    Merci d avance

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    je crois que tu n'as pas compris ce que j'ai dis ....
    Bon alors je m'en suis sortie avec Format ...
    En fait sous eVC++, il faut mettre des simple quote au lieux des doubles ... Et ça passe (tout du moins à la compil j ai plus d erreur !).
    ce que tu dis est faux !
    comme je le répète (trop) souvent ces derniers temps : ce n'est pas parce que ça compile que ça va fonctionner !
    tu es en UNICODE oublie char * .
    utilise les macros appropriées sinon c'est le mur assuré..
    http://msdn2.microsoft.com/en-us/library/c426s321(vs.71).aspx

    alors je modifie mon message ,évite d'utiliser les fonctions C de la CRT (stncmp et compagnie) ,privilégie l'objet CString (ça t'éviteras bien des problèmes) sinon il va falloir que tu utilises les versions UNICODE de ces fonctions.
    consulte MSDN.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Par défaut
    Je suis vraiment désolée ...
    En fait ça fait super super longtemps (et j'en ai très peu fait) que je n ai pas fait de C++ et je n ai jamais fait de eVC++ ... Donc perso, je l'avoue je suis complètement à la ramasse !
    Le truc c est que là je me retrouve à devoir faire un mix de deux codes sources que je ne maitrise pas du tout avec deux techno que je ne maitrise pas du tout donc pour le moment j etais déjà bien contente que ça compile ...
    Par contre, vu ton message (pas le dernier mais le précédent), j ai changé bien évidemment le code pour prendre en compte tes conseils et faire en sorte qu'en plus de compiler ça marche.

    Je sais je suis un peu un boulet sur ce coup là mais après des jours de galère j'ai qd mm préféré me tourner vers le forum quitte à passer pour une idiote que de rester coincée ...

    Sorry et merci de ton aide

  9. #9
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    tu as intérêt de faire le point sur ce que tu utilises sinon tu vas galèrer....
    tu dois prendre le temps:
    -de te renseigner sur l'Unicode cf liens dernier post.
    -faire des recherches sur le forum sur ce mot clef.

    si tu veux éviter les problèmes privilégie l'objet plutôt que les fonctions C ...
    suivant la nature du code ça demandera une refonte complète.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Par défaut
    Je vais faire les recherches que tu me conseilles ...
    Mais le hic c est que la refonte du code que tu me suggère est impossible. En fait cette partie de code fait partie d'un projet de grande envergure qu'il est impossible de refaire. Etant donné que j'utilise du coup des choses existantes, je ne peux tout balayer sans laisser des mois et des mois de travail sur mon passage ce qui n est pas le but.

    Je sais que dans l'idéal c'est ce qu il faudrait faire mais chacun sait (et toi le premier je présume) que dans l'informatique, comme dans beaucoup de domaines, les projets évoluent tellement au jour le jour qu'on est souvent loin du code optimal et que pour des raisons de coût y a peu de chance que l'on reprenne tous les projets !

    Du coup, j'ai pas vraiment le choix que d'utiliser les "char *" mais je ne désespère pas ... Même si le fais que tu me prédises un avenir de galère ne m'enchante guère !

  11. #11
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    les gens autour de toi ont conscience qu'adapter du code qui n'a pas tenu compte de l'UNICODE dés le départ est un travail monstre ?
    car tu vas devoir traquer tous les char pour les remplacer par des _TCHAR (mode générique qui depend du mode de compilation) .
    ainsi que toutes les fonctions C qui travaillent sur des char * pour les remplacer par les versions unicode...
    les const char * par des LPCTSTR etc ..., voir MSDN

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Par défaut
    Je ne sais pas s ils en ont vraiment conscience mais ils le découvriront vite ...
    Je vais essayer de m en sortir comme ça en les mettant en garde ...

    Dis moi, je suis en train de tenter de convertir un CString en "const char *". C'est pas (LPCTSTR) que je dois utiliser ?
    Parce que qd j'ecris cela :
    CString Temp = _id_ADS+strTmp;
    const char* tt = (LPCTSTR)Temp;
    J ai droit à une erreur
    'initializing' : cannot convert from 'const unsigned short *' to 'const char *'

  13. #13
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    lis la note MSDN que j'ai cité ..., oubli char ,char * !
    Citation Envoyé par MSDN
    • TCHAR Where you would use char.
    • LPTSTR Where you would use char*.
    • LPCTSTR Where you would use const char*. CString provides the operator LPCTSTR to convert between CString and LPCTSTR.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Par défaut
    C est justement là dessus que je m etais bassée pour faire mon code .. J ai pas du tout saisir ...
    je pensais qu une fois "transformé" en LPCTSTR je pourrai utiliser ma "fameuse" fonction strcmp.

  15. #15
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut

    Citation Envoyé par farscape
    alors je modifie mon message ,évite d'utiliser les fonctions C de la CRT (strncmp ,strcmp et compagnie) ,privilégie l'objet CString (ça t'éviteras bien des problèmes) sinon il va falloir que tu utilises les versions UNICODE de ces fonctions.
    consulte MSDN.
    je pensais avoir été clair la dessus

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Par défaut
    Oui tu as été clair mais comme dans d autres parties du code ceci y est deja je restait qd même sur mon idée ... Et oui des fois qd on a de mauvaises idées en tête !! Et puis vu que tu m as dit que je devrais tout changer ... J étais moyen motivée !!

    Il vaut donc mieux que je remplace ça :
    if (strcmp(status.serial_number,tt )) throw CErreur_ICE ( CConstantes::CAUSE_ERREUR_NUMERO_SERIE , cr , classe+":"+methode,"Num Série incorrect, NUM_LU=["+CString(status.serial_number).Left(12)+"] NUM_ATTENDU=["+_id_ADS+"]" );
    Par :
    CString Temp = _id_ADS+strTmp;
    LPCTSTR tt = (LPCTSTR)status.serial_number;
    if (Temp.Compare(tt)) throw CErreur_ICE ( CConstantes::CAUSE_ERREUR_NUMERO_SERIE , cr , classe+":"+methode,"Num Série incorrect, NUM_LU=["+CString(status.serial_number).Left(12)+"] NUM_ATTENDU=["+_id_ADS+"]" );

  17. #17
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    si status.serial_number est une CString tu peux les comparer directement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (Temp==status.serial_number)
    après il faut voir de ce que tu fais de ton message dans ton exception.
    parce que la il est définit comme une chaine de caractères, pas comme une chaine Unicode ,et comme il y a des CString au milieu ça ne devrait pas passer à la compilation...
    il faut penser UNICODE.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Par défaut
    Oui mais pourquoi faire simple quand on peut faire compliqué

    Par contre status.serial_number n'est pas une CString ... Je peux faire une comparaison directe entre CString et LPCTSTR ?

    Merci de ta patience en tout cas

  19. #19
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par Mil17
    Oui mais pourquoi faire simple quand on peut faire compliqué

    Par contre status.serial_number n'est pas une CString ... Je peux faire une comparaison directe entre CString et LPCTSTR ?

    Merci de ta patience en tout cas
    il ne devrait pas y avoir de probléme si c'est vraiment de l'unicode ...

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Par défaut
    Oui ça semble marcher merci ...
    J ai une question subsidiaire ... En fait dans le code que je reprends ils utilisent la fonction "strtol".
    J ai bien lu la FAQ à ce sujet, j'ai fait des recherches dans MSDN mais j ai trouvé aucune méthode liée aux CString me permettant de faire la même chose que "strtol" ... Connais tu un moyen de m en sortir une fois de plus ?

    [Edit] Je viens de trouver la piste _tcstol .... Je creuse.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/12/2010, 19h03
  2. Réponses: 2
    Dernier message: 08/12/2010, 18h57
  3. Réponses: 8
    Dernier message: 03/12/2010, 01h32
  4. Réponses: 4
    Dernier message: 08/09/2006, 09h41
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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