Dans divers Code C ++, vous voyez souvent une utilisation différente des chaînes: pwstr, char *, std :: string, cschring, etc ... p>
Quel est le meilleur moment pour utiliser pwstr par rapport à tout autre type de chaîne? P>
8 Réponses :
Lorsque la bibliothèque utilisez-vous avec besoin d'un Par défaut, vous devez utiliser Vous pouvez obtenir un pwstr code>. Ceci est un, selon la convention de dénomination utilisée sous Windows, pointeur à une chaîne de caractères larges. P>
std :: chaîne code> / std :: wstring code>. Seulement lorsque vous interface avec quelqu'un qui attend quelque chose d'autre si vous modifiez cela. P>
pcwstr code> à partir d'un std :: wstring code> avec la méthode c_str () code>. cstring code> est MFC, si je me rappelle. p>
@nobugz: J'ai dit const code> pour une raison: p
"Veut un pwstr" ... "Obtenez un PCWSTR de", pwstr! = pcwstr.
c'est de l'API Windows. P>
Je me souviens de ça comme ça. P>
c'est un p em> -oint à un w em> -ide string. p>
Il serait utilisé dans une application Unicode. Son utilisation serait lorsque vous effectuez des appels vers Windows. Le meilleur type serait en réalité lttrstr code> p em> -oint à une chaîne t em> -yped (Unicode ou ANSI. P>
LPTRSTR CODE> (Comme toutes ces chaînes t i> ne sont nécessaires que lorsque vous souhaitez que votre code soit compilé avec les deux paramètres UNICODE et i> ANSI. IME qui est rarement nécessaire. (Une fois que vous êtes allé unicode, pourquoi auriez-vous besoin de l'ANSI?)
Le meilleur moment pour utiliser pwstr est si tout le code que vous modifiez / s'étendez déjà l'utilise. Il est généralement préférable de continuer à coder dans le paradigme de tout code que vous travaillez. P>
De même, si vous utilisez une forte utilisation d'une bibliothèque particulière qui déclare ses cordes d'une certaine manière, il est généralement préférable de garder ce type de chaîne dans votre propre code. Ainsi, fonctionnant avec Windows MFC, vous utiliseriez CSSTRing. Vieille-style Win32 serait généralement le LPCtstr et similaire. P>
C'est souvent une question de style plutôt qu'un détail de mise en œuvre particulier. P>
pwstr = pointeur sur une chaîne large = WCHAR * dans Windows p>
Le SDK Windows est très raccroché sur TypeDEFS pour les types et les pointeurs aux types. P>
"Quand à Rome" - Utilisez tout type de chaîne du projet que vous travaillez. Les types de chaîne ne sont pas suffisamment importants pour rechercher ou essayer de forcer votre une manière vraie sur tout ce qui est utilisé. P>
pwstr code> est un identifiant de quelque part dans
Un pwstr serait un A En général, l'API Windows est tout unicode à l'intérieur de la place, la plupart des programmeurs Windows utilisent des chaînes WRCHAR. Mais wchar_t code> pointeur de chaîne. C'est une chaîne unicode (généralement UCS2) avec chaque personnage prenant 16 bits. p>
Char * code> serait un pointeur 8 bits par caractère. Cela pourrait être ASCII, ANSI, UTF8 ou l'une des centaines de centaines d'autres codages. Bien que vous n'avez besoin que de vous inquiéter des codages si vous avez besoin de la chaîne pour tenir des langues autres que les symboles anglais ou spéciaux. P>
std :: string code> et cstring code> peut être unicode si les bons symboles sont #definfin code>, donc votre choix entre pwstr code>, std :: string code> et csching code> sera une question de préférence ou de la convention de la base de code que vous travaillez. P>
Sous Windows, WCHAR_T est toujours UTF-16.
Ce qui doit être défini pour changer std :: chaîne code> dans un conteneur de wchar_t code>? Est-ce même légal sur le respect de la norme - je pense que std :: string code> est requis pour être std :: basique_string
@ D.Shawley: Ce serait std: wstring si vous voulez être pédant à ce sujet.
@Nemanja: pwstr est un #define, il n'est pas limité à Windows, il est utilisé par quiconque croit aux informations de type de codage dans les noms de type.
@John: Pwstr parle strictement un typedef et une partie de Windows SDK. Je ne l'ai pas vu ailleurs.
@Nemanja. Tort. Sur Windows Wchar_T est toujours de 16 bits. Cela ne garantit pas UTF16. Vous pouvez très heureusement utiliser un wchar_t * pour tenir utf32 où 2 wchar_t sont chaque symbole. Peut-être que vous vouliez dire que dans les fenêtres API WCHAR_T est toujours UTF16?
@kts: C'est exactement ce que je veux dire - aussi loin que Windows Api, Wchar_T * est uniquement UTF-16. Pour vos propres fins, bien sûr, vous pouvez mettre tout ce que vous voulez dans WCHAR_T.
Erreur C2440: 'Retour': impossible de convertir de 'const wchar_t *' 'à' const pwstr '
Jetez un coup d'œil au fichier Winnt.h dans Windows SDK - vous verrez que PWSTR est un typbef pour WCHAR *. Ce n'est pas une macro. P>
venir dans cette fin tard; Il y a une raison un peu meilleure d'utiliser avec Sal, vous pouvez annoter votre code et vos données avec des jetons qui indiquent des intentions de niveau supérieur: il s'agit d'un paramètre d'entrée, c'est-à-dire que cela ne peut pas être null, vous devez vérifier la valeur de retour de cette fonction, etc. p> C'est une liste très, très longue, en expansigeant sur les plus âgés et plus simples Dans les anciens jours, les fichiers d'en-tête Windows inclus: p> conceptuellement, je comprends ce qu'ils essayaient d'accomplir, montrant l'intention de Comment cela doit être utilisé, mais si Verbose je ne les ai jamais utilisé. p> mais maintenant, c'est: p> ici, le Les en-têtes sont pleins de ces annotations: un exemple de à la fois des paramètres, bien que techniquement pointus sur un seul caractère, dites au compilateur que nous sommes dans un territoire à cordes après tout. P > Je n'utilise toujours pas les types pwstr code> et des types associés qu'il y a une décennie: Microsoft's Langue d'annotation de code source . Ce sont des marqueurs utilisés dans le code pour donner aux astuces de compilateur like-like de l'intention du code, qui est comme GNU __ attribut __ code> ou C ++ [[Attribut]] code> sur mega stéroïdes. dans code>, out code> et inout code > Marqueurs de paramètre. P> _null_terminé < / Code> L'attribut est effectué avec le type et est utilisé par leur infrastructure d'analyse de code pour les erreurs de fabrication de matières. Utilisation de types distincts - pointant vers un seul caractère par rapport à une chaîne - l'aide vraiment à percer au comportement intentionnel. P> pwstr code> -Forné, mais si vous les utilisez, vous obtenez une source de recherche gratuitement. Sal a trouvé assez de bugs dans mon code juste ce matin. P> p>