2008-12-17 7 views
2

J'ai un petit problème avec RAD Studio 2009.
Comme vous le savez, il est possible de désactiver le support Unicode dans MSVS (clic droit sur solution-> properties-> character set = non défini). J'ai besoin de trouver cette fonctionnalité dans RAD Studio, je sais qu'elle existe mais je ne sais pas exactement où.
C'est la seule chose qui arrête mon travail sur un projet universitaire Socket Chat.
P.S. Le problème est apparu après que j'ai installé la mise à jour du site officiel de CodeGear.
Est-il possible de désactiver la prise en charge d'Unicode dans RAD Studio 2009?

+1

Peut-être si vous avez posté une question sur « le problème », il pourrait y avoir un solution qui fonctionnerait même avec le support Unicode activé. –

+0

J'ai besoin d'obtenir la chaîne de l'édition.
TMainForm-> IPEdit-> Text.c_str().
Je pense que ça doit être char * return value, mais c'est wchar_t *. J'ai besoin de le convertir en char * pour travailler avec les fonctions de socket. Une idée de comment le faire? – chester89

Répondre

12

Réponse courte: Non, il n'y a pas de fonction pour désactiver Unicode dans RAD Studio 2009.

0

passe résolu le problème de cette façon:


    wchar_t* str = Form2->Edit1->Text.w_str(); 
    char* mystr = new char [Form2->Edit1->Text.Length() + 1]; 
    WideCharToMultiByte(CP_ACP, 0, str, -1, mystr, Form2->Edit1->Text.Length() + 1, NULL, NULL); 
    MessageBox(NULL, mystr, "It`s ok", MB_OK); 
    delete []mystr; 

mais il me semble que s `une autre façon

1

Est-il possible de l'éteindre? La meilleure question est: devriez-vous l'éteindre? Et la réponse est non. Il est loin de concevoir l'application de manière à ce que les caractères Unicode soient envoyés correctement lors de la sérialisation (par exemple, dans les sockets de votre application), que de concevoir un programme non Unicode dans un monde Unicode. Même pour un projet simple, cela vaut la peine d'apprendre l'Unicode en principe.

1

Pour être précis, vous pouvez construire votre application C++ Builder sans que l'indicateur #UNICODE soit défini en modifiant les options de projet pour "TCHAR maps to char".

Cela signifie que SendMessage appellera SendMessageA, etc, et le TCHAR

Cependant, si vous utilisez des fonctions VCL, il n'y a pas d'équivalents non-unicode à ceux-ci. La VCL est maintenant héritée Unicode, et cela ne peut pas être changé.

Re: votre "solution" - il y a un moyen plus simple. qui fonctionne aussi bien avec TCHAR = char ou wchar_t:

MessageBox(NULL, Form2->Edit1->Text.t_str(), _TEXT("It`s ok"), MB_OK); 
+0

L'utilisation des macros _TEXT et ainsi de suite serait quelque chose à utiliser là-bas, donc si le passage à Unicode est fait, il ne sera pas aussi horrible pour les chaînes explicites. –

+0

Vous avez raison. Merci. – Roddy

3

Vous devez être prudent en utilisant la méthode UnicodeString :: t_str(). Si vous l'appelez dans un projet compilé pour Ansi plutôt que Unicode, t_str() modifie le contenu interne de UnicodeString. Cela peut avoir des effets secondaires inattendus, en particulier pour les valeurs UnicodeString provenant des contrôles.

+0

Remy, c'est un plaisir de vous voir ici! Bienvenue à StackOverflow.La communauté Delphi ici a juste eu beaucoup plus riche! – Argalatyr

3

chester - Vous n'avez pas besoin d'appeler WideCharToMultiByte() directement. Laissez le RTL faire le travail pour vous:

AnsiString s = Form2->Edit1->Text; 
MessageBoxA(NULL, s.c_str(), "It`s ok", MB_OK); 
1

Il y a une meilleure façon, je le fais comme ceci:

MessageBox(NULL, Form2->Edit1->Text.w_str(), L"It`s ok", MB_OK); 
Questions connexes