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 :

convertir une chaine de caractères en LPCWSTR


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 24
    Par défaut convertir une chaine de caractères en LPCWSTR
    Bonjour,
    j'ai une fonction CogetObject qui prend un paramètre de type LPCWSTR

    donc je veux convertir une chaine de caractère type str = "C:\file1\object1!Object2" en LPCWSTR.

    j'ai trouvé ce bout de code


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     //ANSI->Unicode
    LPCSTR szAnsi = "C:\file1\object1!Object2";
    int Size = MultiByteToWideChar (CP_ACP, 0, szAnsi, -1, NULL, 0);
    LPWSTR wUnicode = new WCHAR[Size];
    MultiByteToWideChar (CP_ACP, 0, szAnsi, -1, wUnicode, Size);
    sur msdn, il est précisé qu'il faut inclure winnls.h et ajouter la bibliothèque coredll.lib

    j'ai plus d'une centaine d'erreurs qui sortent et sont toutes liées au fichier winnls.j

    la première est : error C2061 : Syntax error : identifier 'LGRPID'
    error

    j'utilise visual studio 2003

    Merci pour l'aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 24
    Par défaut
    il ne fallait pas inclure winnls.h mais plutôt Windows.h

    et la bibliothèque coredll.lib est propre à Windows Mobile

    mainteant je n'ai que 12 erreurs et 7 warning

    la première erreur :

    Error C2275 : 'LPCWSTR' : illegal use of this type as an expression

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Oui, le code a quelques problèmes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <windows.h>
     //ANSI->Unicode
    LPCSTR szAnsi = "C:\file1\object1!Object2";
    int Size = MultiByteToWideChar (CP_ACP, 0, szAnsi, -1, NULL, 0);
    LPWSTR wUnicode = new WCHAR[Size];
    MultiByteToWideChar (CP_ACP, 0, szAnsi, -1, wUnicode, Size);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    08-08-19.c:6:17: warning: unknown escape sequence '\o'
    08-08-19.c:7: error: initializer element is not constant
    08-08-19.c:8: error: `new' undeclared here (not in a function)
    08-08-19.c:8: error: parse error before "WCHAR"
    08-08-19.c:9: error: parse error before numeric constant
    08-08-19.c:9: warning: type defaults to `int' in declaration of `MultiByteToWide Char'
    08-08-19.c:9: error: conflicting types for 'MultiByteToWide
    Char'
    /usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/winnls.h:621: error
    : previous declaration of 'MultiByteToWideChar' was here
    08-08-19.c:9: error: conflicting types for 'MultiByteToWideChar'
    /usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/winnls.h:621: error
    : previous declaration of 'MultiByteToWideChar' was here
    08-08-19.c:9: warning: data definition has no type or storage class
    Alors, ligne par ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LPCSTR szAnsi = "C:\file1\object1!Object2";
    '\f' et '\o' ne code pas un antislash. Pour écrire un antislsh, on écrit '\\'

    --EDIT--
    Size n'est pas constant, on ne peut donc pas s'en servir pour un allocation derrière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LPWSTR wUnicode = new WCHAR[Size];
    c++ ?
    On écrira plutôt WCHAR wUnicode[64] = L"";
    Dernière modification par Invité(e) ; 20/08/2008 à 15h20. Motif: Pas réveillé

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 24
    Par défaut
    Citation Envoyé par mabu Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int Size = MultiByteToWideChar (CP_ACP, 0, szAnsi, -1, NULL, 0);
    A supprimer, on ne déclare pas une fonction déjà déclarée au milieu du code...
    j'ai déclaré la variable int Size au début puis je lui ai affecté la valeur Size= ...




    Citation Envoyé par mabu Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LPWSTR wUnicode = new WCHAR[Size];
    c++ ?
    On écrira plutôt WCHAR wUnicode[Size] = L"";
    autant pour moi !!! j'ai été sur le C++ dernièrement

    le type LPCWSTR n'est pas défini dans le langage C?

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par mony84 Voir le message
    j'ai déclaré la variable int Size au début puis je lui ai affecté la valeur Size= Multi...
    Pardon, j'avais lu int MultiByteToWideChar (CP_ACP, 0, szAnsi, -1, NULL, 0);

    C'est OK pour Size.

    le type LPCWSTR n'est pas défini dans le langage C?
    Je ne crois pas, ce doit être un type window.

    Le problème de la ligne LPWSTR wUnicode = new WCHAR[Size]; c'est qu'on y fait un allocation type c++ avec.

    Si tu veux à tout prix faire une allocation dynamique, on peut écrire : LPWSTR wUnicode = malloc(Size * sizeof(WCHAR));

    Mais dans ce cas if faut ajouter free(wUnicode); en fine de code.

  6. #6
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 38
    Par défaut
    Citation Envoyé par mabu Voir le message
    le type LPCWSTR n'est pas défini dans le langage C?
    Je ne crois pas, ce doit être un type window.
    Je confirme, c'est propre à Visual C++ (je suis dedans depuis près de 2 mois 1/2).
    Sinon pour passer ta chaîne de caractère en LPCWSTR, tu peux tout simplement faire un cast. J'ai déjà utilisé cette méthode et ça fonctionne plutôt bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CString sMaChaine;
    sMaChaine = "C:\\file1\\object1!Object2";
     
    CogetObject(....,(LPCWSTR) sMaChaine,....)
    Il ne te reste plus qu'à compléter avec les arguments qui vont bien.

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/10/2007, 13h51
  2. Réponses: 5
    Dernier message: 16/05/2007, 13h43
  3. Convertir une chaine de caractère en tableau
    Par Mysti¢ dans le forum Général Python
    Réponses: 7
    Dernier message: 09/04/2007, 12h20
  4. Réponses: 6
    Dernier message: 14/06/2006, 15h27
  5. [XSL] Convertir une chaine de caractère
    Par bahet dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/04/2006, 10h24

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