C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Comment faire la definition d'une chaine de caractere WCHAR?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
giova
Guest





PostPosted: Tue Apr 06, 2004 4:17 pm    Post subject: Comment faire la definition d'une chaine de caractere WCHAR? Reply with quote



Bonjour.

Je dois utiliser gdiplus.dll

la fonction a utiliser est : Bitmap(WCHAR*,BOOL)

je suis debutant je n'ai jamais travaillé avec le type WCHAR, plutot habitué
aux string . comment manipule t'on ce type? que faut il inclure pour pouvoir
l'utiliser?

je vous remercie d'avance pour votre aide.


Back to top
Arnaud Debaene
Guest





PostPosted: Tue Apr 06, 2004 9:54 pm    Post subject: Re: Comment faire la definition d'une chaine de caractere WC Reply with quote



giova wrote:
Quote:
Bonjour.

Je dois utiliser gdiplus.dll

la fonction a utiliser est : Bitmap(WCHAR*,BOOL)

je suis debutant je n'ai jamais travaillé avec le type WCHAR, plutot
habitué aux string . comment manipule t'on ce type?
WCHAR = une macro pour wchar_t, un caractère large (Unicode). Codé sur 16

bits sous Windows, pls sur cetaines plates-formes.

Quote:
que faut il
inclure pour pouvoir l'utiliser?
rien du tout, wchar_t est un type primitif. Utilises std::wstring (#include

<string>) pour te simplifier la gestion de ces chaînes. et
std::wstring::c_str() pour obtenir le wchar_t correspondant à la chaine.

Arnaud



Back to top
Fabien LE LEZ
Guest





PostPosted: Wed Apr 07, 2004 12:02 am    Post subject: Re: Comment faire la definition d'une chaine de caractere WC Reply with quote



On Tue, 6 Apr 2004 23:54:41 +0200, "Arnaud Debaene"
<adebaene (AT) club-internet (DOT) fr> wrote:

Quote:
que faut il
inclure pour pouvoir l'utiliser?
rien du tout, wchar_t est un type primitif. Utilises std::wstring (#include
string>) pour te simplifier la gestion de ces chaînes. et
std::wstring::c_str() pour obtenir le wchar_t correspondant à la chaine.

c_str() renvoie un "wchar_t const*", non convertible en un "wchar_t" a
priori.

De deux choses l'une :
- soit la fonction ne modifie pas la chaîne, et tu peux utiliser
const_cast<> avec force commentaires
- soit la fonction modifie effectivement la chaîne, auquel cas
tu dois connaître à l'avance la taille maximale de la chaîne. Et
std::vector<wchar_t> me paraît le conteneur le plus approprié.

Exemple [non portable] (avec char, mais le principe est le même avec
wchar_t) :

std::vector <char> buf (MAXDIR); // MAXDIR est la limite telle
que définie par mon compilo
if (getcurdir (drive, &(buf[0])) != 0)
{ Panique ("Y'a un blème !");
}
else
{
std::string nom_repertoire (buf.begin());
...
}

--
;-)

Back to top
giova
Guest





PostPosted: Wed Apr 07, 2004 9:54 am    Post subject: Re: Comment faire la definition d'une chaine de caractere WC Reply with quote

J'ai rencontre encore beaucoup de mal manipuler ce type.

mon constructeur : Bitmap(WCHAR*,BOOL)

attend un WCHAR* qui en fait represente le nom du fichier a ouvrir. je
souhaite faire une classe avec un attribut de ce type, voir de type string
avec une fonction WCHAR* GetString(void)

Lorsque j'appelle le constructeurBitmap(WCHAR*,BOOL) le compilateur me jete
me disant que le premier parametre de type std::wstring ne peut etre
converti en WCHAR*
j'avoue ne pas trop m'y retrouver dans les doc msdn pour retrouver toutes
les fonctions de wchar, et ainsi trouver comment convertir un wstring en
WCHAR*


"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit dans le message de
news:kqg6705k7kvr1pbnq76pv7b0u8s4sdii8u (AT) 4ax (DOT) com...
Quote:
On Tue, 6 Apr 2004 23:54:41 +0200, "Arnaud Debaene"
[email]adebaene (AT) club-internet (DOT) fr[/email]> wrote:

que faut il
inclure pour pouvoir l'utiliser?
rien du tout, wchar_t est un type primitif. Utilises std::wstring
(#include
string>) pour te simplifier la gestion de ces chaînes. et
std::wstring::c_str() pour obtenir le wchar_t correspondant à la chaine.

c_str() renvoie un "wchar_t const*", non convertible en un "wchar_t" a
priori.

De deux choses l'une :
- soit la fonction ne modifie pas la chaîne, et tu peux utiliser
const_cast<> avec force commentaires
- soit la fonction modifie effectivement la chaîne, auquel cas
tu dois connaître à l'avance la taille maximale de la chaîne. Et
std::vector<wchar_t> me paraît le conteneur le plus approprié.

Exemple [non portable] (avec char, mais le principe est le même avec
wchar_t) :

std::vector <char> buf (MAXDIR); // MAXDIR est la limite telle
que définie par mon compilo
if (getcurdir (drive, &(buf[0])) != 0)
{ Panique ("Y'a un blème !");
}
else
{
std::string nom_repertoire (buf.begin());
...
}

--
Wink



Back to top
Martinez Jerome
Guest





PostPosted: Thu Apr 08, 2004 8:34 am    Post subject: Re: Comment faire la definition d'une chaine de caractere WC Reply with quote

giova wrote:


Quote:
Lorsque j'appelle le constructeurBitmap(WCHAR*,BOOL) le compilateur me jete
me disant que le premier parametre de type std::wstring ne peut etre
converti en WCHAR*
j'avoue ne pas trop m'y retrouver dans les doc msdn pour retrouver toutes
les fonctions de wchar, et ainsi trouver comment convertir un wstring en
WCHAR*

comme dit précédement :
wstring::c_str() pour avoir la version "a la C" qu'aime Windows (l'API
est en C, pas C++).
Il te donnera le const wchar* que tu cherches.

wchar_t n'a pas de fonction, c'est un type de base comme char, int etc...

wchar_t est le pendant UNICODE de char, a manipuler comme char.
Tu disposes dans l'API windows d'outils de conversion char (que tu
recuperes de certaines fonctions windows) en wchar_t. Me rappelle plus
le nom, voir le newsgroup adapté.

Remarque : pour ecrire dans le code un nom de fichier, utiliser :
std::string Ansi="C:\a.txt"; //version ansi, habituelle
std::wstring Unicode=L"C:\a.txt"; //version unicode


Back to top
Arnaud Meurgues
Guest





PostPosted: Thu Apr 08, 2004 1:56 pm    Post subject: Re: Comment faire la definition d'une chaine de caractere WC Reply with quote

Martinez Jerome wrote:

Quote:
wchar_t est le pendant UNICODE de char, a manipuler comme char.

Je ne suis pas sûr qu'on puisse considérer que wchar_t soit unicode.
D'abord parce qu'unicode, ce n'est pas une représentation, c'est un
mapping entre un nombre et un caractère. On peut très bien représenter
de l'unicode dans des char si l'on utilise l'UTF8.
Ensuite, parce que la norme n'impose rien sur le format de wchar_t.
On pourrait espérer, afin de supporte l'UTF32 (qui pourrait être
considéré comme la représentation la plus naturelle d'unicode) que soit
demandé à wchar_t d'avoir au moins 32 bits. Mais ce n'est pas le cas. Si
je ne me trompe pas, wchar_t peut même être un typedef de char.

--
Arnaud
(Supprimez les geneurs pour me répondre)


Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Tue Apr 13, 2004 10:30 am    Post subject: Re: Comment faire la definition d'une chaine de caractere WC Reply with quote

Arnaud Meurgues <arnaud (AT) meurgues (DOT) non.fr.invalid> wrote

Quote:
Martinez Jerome wrote:

wchar_t est le pendant UNICODE de char, a manipuler comme char.

Je ne suis pas sûr qu'on puisse considérer que wchar_t soit unicode.

En général, certainement pas. La norme C++ n'en exige rien.

Dans la pratique, je crois qu'aujourd'hui, si une implémentation
supporte bien un type de caractère plus large (c-à-d un wchar_t qui est
différent de char), et c'est le cas des implémentations courantes, on
est en droit à s'attendre à ce que son encodage soit basé sur l'Unicode.
Qualité de l'implémentation exige.

Quote:
D'abord parce qu'unicode, ce n'est pas une représentation, c'est un
mapping entre un nombre et un caractère. On peut très bien représenter
de l'unicode dans des char si l'on utilise l'UTF8.

Ou UTF-16:-).

Quote:
Ensuite, parce que la norme n'impose rien sur le format de wchar_t.
On pourrait espérer, afin de supporte l'UTF32 (qui pourrait être
considéré comme la représentation la plus naturelle d'unicode) que
soit demandé à wchar_t d'avoir au moins 32 bits.

Si on commençait de rien, et qu'on n'avait aucun contraint de
l'existant, c'est sûr que la solution « idéale » serait UCS-4 en
interne, et UTF-8 en externe. L'intention du comité, c'est bien qu'un
wchar_t contient un caractère complet, sans qu'il soit nécessaire à se
retourner à un jeu de « représentation » (avec des encodages qui dépend
de l'état ou des caractères composés). (Note qu'en interne, on peut
avoir réelement un « jeu de caractère », avec des valeurs entières qui
représentent des caractères, indépendamment de la « représentation » de
ces valeurs.) Mais c'est une luxe que n'a que ceux qui sont venu
tardivement à l'internationalisation. Pendant longtemps, Unicode
prétendait que 16 bits suffiraient.

En attendant, il y a des fournisseurs qui se sont fixé sur 16 bits,
selon les anciennes normes Unicode, et qui sont coincés par des
problèmes de compatibilité. Ils ont le choix entre se restreindre à
UCS-2 (un sous-ensemble de Unicode) ou de passer à UTF-16 (un encodage
qui utilise des caractères composés). Dans l'ensemble, c'est la deuxième
solution qui a été adoptée. (J'avoue ne pas trop comprendre pourquoi. Du
moment que j'accepte de traiter des caractères composés, pourquoi pas
passer carrément à UTF-8 ?)

Quote:
Mais ce n'est pas le cas. Si je ne me trompe pas, wchar_t peut même
être un typedef de char.

Selon la norme, oui. Sur les machines généraliste courantes, c'est
prèsque toujours soit 16 bits (UTF-16, chez Microsoft et IBM), soit
32 bits (UCS-4, chez des Unix, sauf AIX, et chez Linux).

--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.