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 :

Macro ATL pour conversion de type


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Inscrit en
    Juin 2005
    Messages
    110
    D�tails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Par d�faut Macro ATL pour conversion de type
    Bonjour � tous,

    Je cherche � convertir proprement un CHAR * en CComBSTR et vice versa de mani�re propre. J'ai fini par trouver �a:

    http://msdn.microsoft.com/en-us/library/87zae4a3.aspx

    Le probl�me qui se pose c'est que je ne sais pas si j'ai affaire � de l'ANSI ou de l'UNICODE pour le CComBSTR car d'apr�s le lien qui suit �a peut �tre soit l'un soit l'autre (avec une pr�f�rence pour l'UNICODE):

    http://msdn.microsoft.com/en-us/library/zh7x9w3f.aspx

    J'ai exactement le m�me genre de question en ce qui concerne le char * . Je sais que c'est du code ASCII, mais comment c'est cod�? En ANSI, ou en generic character string?

    Et c'est l� que je me perds, si mon CComBSTR est de l'ANSI, et le char * est de l'ANSI aussi, je vais devoir �crire une macro qui converti de l'ANSI en ANSI...

    Quelqu'un peut-il �clairer ma lanterne?

    D'avance merci

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Conversion char* en CComBSTR: Utiliser tout simplement le constructeur de CComBSTR � partir de ton const char*.
    Ta cha�ne "ANSI" (un terme plus exact est "ASCII �tendu", car en fait, les pages de code Windows n'ont jamais �t� standardis�es par l'ANSI) sera automatiquement convertie en CComBSTR Unicode UTF-16, en utilisant la page de codes "ANSI" courante (mais je crois que c'est "courante du syst�me" et non pas "courante du programme").

    Conversion CComBSTR en char* : Plus compliqu�. Sur une version r�cente d'ATL, tu peux utiliser la classe COLE2A.

    Je ne comprends pas ce que tu veux dire par "Generic character string". Tout ce que je sais, c'est qu'un char* est en ASCII �tendu. Pratiquement jamais en UTF-8, car les fonctions de Windows ne supporte que la conversion depuis et vers ce format, mais pas la manipulation de cha�nes UTF-8.

    Une CComBSTR, ce n'est pas de "l'ANSI", mais de l'Unicode UTF-16. Et ce, depuis que Windows est pass� du 16 (Win3.11) au 32 bits.

    PS: Plut�t que des char, tu devrais utiliser des TCHAR quand tu programmes sous Windows (et donc, utiliser COLE2T au lieu de COLE2A).
    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 confirm�
    Inscrit en
    Juin 2005
    Messages
    110
    D�tails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Par d�faut
    Bonjour Medinoc,

    Pour la conversion de char * en CComBSTR, �a tourne, merci beaucoup, par contre dans l'autre sens je coince. J'ai fait �a:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include "atlbase.h"
    #include "atlconv.h"
     
    CComBSTR pbstrBackupXML = L"";
    char * CharXML = NULL;
    CHECK_SUCCESS(pBackupComponent->SaveAsXML(&pbstrBackupXML));
    COLE2A CharXML(pbstrBackupXML);
    J'ai des messages d'erreurs pas sympa du tout:

    error C2065: 'COLE2A'*: identificateur non d�clar�
    error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'CharXML'
    error C2064: le terme ne correspond pas � une fonction qui prend 1 arguments

    Je me dit que c'est peut-�tre � cause de �a:
    Header file: AtlBase.h, AtlConv.h (declared in AtlConv.h)

    C'est quoi le "declared in AtlConv.h"? J'ai mal fait mes include?

    Je me suis bas� sur le msdn pour �a:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //Example 1
    // Convert LPCWSTR to LPCSTR.
    void ExampleFunction1(LPCWSTR pszW)
    {
       // Create an instance of CW2A, called pszA,
       // and initialize it with pszW.
       CW2A pszA(pszW);
       // pszA works like an LPCSTR, and can be used thus:
       ExampleFunctionA(pszA);  
       // Note: pszA will become invalid when it goes out of scope.
    }
    PS: "Generic character string" est repr�sent� par le type "T" sur la page dont je parlais dand le premier post. D�sol� si je l'ai mal employ� :-/

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Pour T, j'appelle-�a simplement "une cha�ne de TCHAR".

    Pour COLE2A, es-tu s�r que tu n'es pas sous Visual 6 (ou ant�rieur), au moins ?
    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 Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par d�faut
    salut !

    Pourquoi tu ne passes pas par des _bstr_t ?

  6. #6
    Membre confirm�
    Inscrit en
    Juin 2005
    Messages
    110
    D�tails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Par d�faut
    Pour le T, d'accord, je retiens.

    En ce qui concerne mon IDE, visual C++ 2008 express.

    Laisse moi deviner. Il y a une limitation parce que je suis sous une version express et que je n'ai pas les bon .h?

Discussions similaires

  1. Besoin d'aide pour conversion de type
    Par RomyNet dans le forum C#
    R�ponses: 6
    Dernier message: 13/08/2012, 12h21
  2. API pour Conversion de donn�es de type comp-3(Cobol)
    Par Kirou dans le forum API standards et tierces
    R�ponses: 2
    Dernier message: 01/05/2012, 19h35
  3. Conversion de types pour "insert into"
    Par forumcpp_nono dans le forum JDBC
    R�ponses: 0
    Dernier message: 03/09/2009, 09h40
  4. R�ponses: 8
    Dernier message: 10/02/2007, 02h44
  5. R�ponses: 5
    Dernier message: 18/07/2006, 12h10

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