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 :

Passage vers Unicode


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    907
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 907
    Par défaut Passage vers Unicode
    Bonjour,

    Je dois passer un programme en Unicode, je definie _UNICODE, mais à la compilation il y a beaucoup d'erreurs.

    Quelqu'un pourrais il m'indiquer la procédure ?

    Merci,
    Christophe,

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Bonjour,
    1. Il faut définir à la fois _UNICODE et UNICODE.
    2. Le programme doit être correctement écrit pour supporter d'être compilé dans les deux modes (emploi des TCHAR, conversion conditionnelle quand certaines fonctions exigent l'un ou l'autre type de chaîne... (Facilité par les CStringT de MFC 7))
    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.

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Par défaut
    Effectivement tu peux utiliser TCHAR comme type. Le principe est que le preprocesseur va remplacer TCHAR par wchar_t ou char selon que tu compiles en Unicode ou non.

    Le point d'entree de ton programme doit être wWinMainCRTStartup

    Le changement majeur est que tes caracteres ne seront plus codés sur un octet, mais sur au moins deux. Du coup, les fonctions du CRT ne fonctionnent pas en version ANSI sur des buffer Unicode.
    Tu trouveras tous les équivalents dans tchar.h ou à cette adresse :
    http://msdn.microsoft.com/library/de...e_mappings.asp


    Qu'est-ce que fait ton programme ??

    Quels sont les types d'erreurs que tu as ??

    Mais renseigne toi sur le sujet avant de te lancer, ce n'est pas tres long de comprendre comment gérer des buffers Unicode sous Windows et ca te fera gagner énormément de temps pour corriger les erreur de compil.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Le point d'entree de ton programme doit être wWinMainCRTStartup
    Gaffe à ce que tu dis, là...
    Cette fonction ne doit pas être définie par l'utilisateur, elle est fournie par la CRT. Par contre, c'est elle qui appelle le main()...


    En TCHAR, le main() doit s'appeler _tmain().
    Ou si tu as une application fenêtrée, WinMain() doit s'appeler _tWinMain() (mais en MFC, tu ne verras ni l'une ni l'autre de toute façon).
    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.

  5. #5
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Par défaut
    Désolé du manque de précision Médinoc.
    Christophe, En MFC, tu ne définis pas le point d'entrée. En fait ton point d'entrée est la fonction InitInstance de ton objet APP.
    Pour que la fonction InitInstance, mappe le bon point d'entrée tu dois définir dans les settings de ton projet (sous VC6, Project-->Settings-->Link. Category-->Output. Entry Point Symbol = wWinMainCRTStartup).

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je pense que c'est inutile, ça : Il me semble bien que c'est choisi par défaut selon les réglages et le nom de la fonction main utilisée (enfin, peut-être pas sous Visual 6, tout compte fait).

    Il faudrait éviter de s'exiter avec le point d'entrée, que je n'ai jamais eu à changer en 4.5 ans de prog sous Visual 6 puis 8...
    (sauf la fois où j'ai bricolé un programme sans la CRT, bien sûr...)
    Edit: Normal, j'oubliais de changer le main()...
    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.

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

Discussions similaires

  1. Conversion de chaine vers unicode
    Par viny dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 08/01/2007, 22h22
  2. [JVCL] probleme passage ver 3.1 -> 3.2
    Par TicTacToe dans le forum Delphi
    Réponses: 3
    Dernier message: 07/12/2006, 13h29
  3. conversion chaîne multioctets vers unicode
    Par Bruno75 dans le forum Delphi
    Réponses: 1
    Dernier message: 25/09/2006, 15h53
  4. Conversion Ansi vers Unicode
    Par FamiDoo dans le forum C++
    Réponses: 10
    Dernier message: 10/08/2006, 14h31
  5. cyrilique vers unicode
    Par oFlex dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 08/07/2006, 01h21

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