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 :

MFC - Appel de fonction en mode Unicode ?


Sujet :

MFC

  1. #1
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut MFC - Appel de fonction en mode Unicode ?
    Bonjour à tous,

    J'utilise Visual Studio version 2005 et les MFC.

    Dans les propriété du projet j'ai le jeu de caractère "Utiliser le jeu de caractères Unicode".

    Lorsque j'appel des fonction comme celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GetProcAddress(m_hDllInstance, "InitLib" );
    J'obtiens l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    error C2664: 'GetProcAddress' : cannot convert parameter 2 from 'const wchar_t [9]' to 'LPCSTR'
    J'ai essayé avec L"InitLib" et aussi avec _T("InitLib") mais toujours la même erreur.

    Mise à part changer l'options de Visual Studio pour utiliser le jeux de caractère "MBCS", y a-t-il un autre moyen ?

    Merci à tous.
    Mieux vaut ne rien savoir que beaucoup savoir à moitié !
    Faite vous en pas avec la vie, personne en est sortie vivant !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Points : 347
    Points
    347
    Par défaut
    Bonjour

    J'ai essayé de reproduire ton erreur de compile projet MFC avec unicode et je n'ai pas cette erreur.Quel est le type de projet?

    As tu essayé un cast direct a la bourrin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetProcAddress(m_hDllInstance, (LPCSTR)"InitLib" );
    Cordialement

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Points : 155
    Points
    155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetProcAddress(m_hDllInstance, _T("InitLib") );

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Euh...
    C'est bizarre, GetProcAddress() est justement LA fonction pour laquelle le passage d'ASCII étendu à Unicode ne devrait pas poser de problème, puisqu'elle n'accepte qu'une chaîne ASCII étendu...

    GetProcAddress(m_hDllInstance, "InitLib" ); devrait donc marcher, tant que la chaîne n'est ni entourée de TEXT()/_T() ni précédée d'un L...
    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
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut
    Je vais faire un petit programme test sous Visual Studio et je le placerai en pièce jointe ici.
    Mieux vaut ne rien savoir que beaucoup savoir à moitié !
    Faite vous en pas avec la vie, personne en est sortie vivant !

  6. #6
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    @Erakis: ta syntaxe est juste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GetProcAddress(m_hDllInstance, "InitLib" );
    je m'en sers aussi dans des programmes UNICODE et j'ai pas de soucis sous VS2005.

    cherches plutot dans les options du projet, genre une option "forcer les chaines en Unicode" ...

    sinon je vois pas, ça devrait marcher.

    @+

  7. #7
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut
    Ben coudonc ! C'est vrai en plus.
    Que faire qu'on a _T("") un peu partout dans nos vieux projets alors ?
    Mieux vaut ne rien savoir que beaucoup savoir à moitié !
    Faite vous en pas avec la vie, personne en est sortie vivant !

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    En fait, il faut avoir _T() un peu partout SAUF dans les fonctions qui ne supportent absolument pas unicode... Parmi lesquelles figure GetProcAddress().

    Heureusement, avec les versions récentes de MFC, on a droit, au lieu d'une classe CString toujours en TCHAR, à deux classes (en fait, deux instances d'un même template) CStringA et CStringW (+ CString qui est un typedef sur l'un des deux) avec les constructeurs qui vont bien. Cela permet de faire les conversions nécessaires très facilement.

    Sans oublier les autres classes de conversion de chaîne, qui remplacent les macros T2A, A2W, etc.
    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.

  9. #9
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut
    Un gros merci à tous,

    Je suis un peu plus intelligent qu'hier grâce à vous
    Mieux vaut ne rien savoir que beaucoup savoir à moitié !
    Faite vous en pas avec la vie, personne en est sortie vivant !

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

Discussions similaires

  1. appel de fonctions en MFC
    Par beb30 dans le forum MFC
    Réponses: 5
    Dernier message: 12/04/2006, 15h18
  2. [MFC] Appel Fonction OnEraseBkgnd
    Par bletz dans le forum MFC
    Réponses: 4
    Dernier message: 13/10/2005, 14h03
  3. Réponses: 7
    Dernier message: 10/10/2005, 14h31
  4. Pas d'appel à une fonction si mode Release
    Par Crisanar dans le forum C++
    Réponses: 8
    Dernier message: 17/09/2005, 04h54
  5. [MFC] débutant probleme appel de fonction
    Par Gloubi99 dans le forum MFC
    Réponses: 9
    Dernier message: 30/08/2005, 15h40

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