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 Char* en BSTR


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 128
    Par défaut Convertir Char* en BSTR
    Tout d'abord, bonsoir.

    Vous allez vous dire : Hey mais j'ai déjà vu ce genre de message.. Et vous n'aurez pas tort.

    Pour faire bref :
    * Je dois programmer en C(pas en C++)
    * J'ai un char*
    * On me demande de convertir ce char* en BSTR
    * J'ai déjà programmer en C mais ça fait un bail

    Pour tout vous dire, j'ai tous lu sur internet : SysAllocString, MultiByteToWideChar, ..
    Et j'ai tout essayé aussi. Je n'arrive jamais à utiliser ce que je trouve sur internet. Par ex, pour SysAllocString, j'inclu <oleauto.h>, je vois dedans cette foutue fonction et pourtant il me lâche que cette fonction n'existe pas..

    Bref, je crois que je vais péter un plomb. Pourriez-vous, svp, me dire comment faire ça ? Et si possible pas avec des fonctions qui veulent bien exister avec mon programme.
    Et si possible, pourriez-vous mettre le(s) nom(s) de la librairie qui me permet(tent) d'utiliser votre fonction.

    J'utilise code::blocks avec mingw.

    Un tout grand merci.

    Bien à vous,
    Moi.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Je viens de trouver une description sur le site de MSDN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    A BSTR is a composite data type that consists of a length prefix, a data string, and a terminator. The following table describes these components.
    Item	Description
    Length prefix	A four-byte integer that contains the number of bytes in the following data string. It appears immediately before the first character of the data string. This value does not include the terminating null character.
    Data string	A string of Unicode characters. May contain multiple embedded null characters.
    Terminator	Two null characters.
    Est-ce bien de ca dont tu parles ?

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 128
    Par défaut
    Oui

    C'est loin le C, donc je n'ai pas eu envie de créer le BSTR par moi même, si c'est ça que tu te demandes.

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Le programmer en C ne demande à la base que de créer uns structure correspondant à la description donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct
    {
      int length;
      char *unicodetext;
      char terminator[2];
    } BSTR;
    Je pense qu'on peut même se passer du terminator. À partir du moment où on implémente ce type les fonctions de traitement prendrons en compte que la fin se termine par deux '\0'.

    Il ne reste ensuite qu'à implémenter les fonctions qui vont manipuler cette structure.

  5. #5
    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
    Citation Envoyé par gerald3d Voir le message
    Le programmer en C ne demande à la base que de créer uns structure correspondant à la description donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct
    {
      int length;
      char *unicodetext;
      char terminator[2];
    } BSTR;
    C'est complètement faux. Même en ignorant le fait que les BSTR soient en UCS-2 ou UTF-16 depuis Windows 95, les caractères sont supposées être directement après la longueur, pas un pointeur vers eux...

    Et puis, le pointeur retourné doit être vers les caractères eux-mêmes (oui, la longueur se situe "en deça" du pointeur). Avec la règle obligeant à toujours mettre un \0 après la chaîne de toute façon, cela permet de passer la BSTR à des fonctions qui attendent une chaîne "normale" (mais toujours en UTF-16)
    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.

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Oui, je suis sûrement dans l'erreur.

    J'avais cru comprendre que le caractère NULL pouvait se trouvait en tout point du texte snas pour autant indiquer la fin du texte.
    Data string A string of Unicode characters. May contain multiple embedded null characters.

  7. #7
    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
    Citation Envoyé par zizoufoot Voir le message
    et pourtant il me lâche que cette fonction n'existe pas..
    À la compilation ou au linkage?
    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.

  8. #8
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 128
    Par défaut
    Fallait que je le force, il ne prenait pas la lib automatiquement.
    Problème résolu.

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

Discussions similaires

  1. convertir char* en CString
    Par zelchico dans le forum MFC
    Réponses: 5
    Dernier message: 06/12/2007, 15h55
  2. Convertir Char* en String
    Par Blunt dans le forum C++/CLI
    Réponses: 1
    Dernier message: 01/07/2007, 16h46
  3. Convertir char* en string
    Par KorTeX22 dans le forum C++
    Réponses: 5
    Dernier message: 13/03/2007, 11h54
  4. Comparer 2 Char / Convertir Char -> Int
    Par mbk-w dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/06/2006, 11h09

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