2009-05-04 10 views
1

J'ai une DLL Windows qui supporte actuellement uniquement ASCII et j'ai besoin de le mettre à jour pour travailler avec les chaînes Unicode. Cette DLL utilise actuellement des char * strings dans un certain nombre d'endroits, avec un certain nombre d'appels ASCII Windows API (comme GetWindowTextA, RegQueryValueExA, CreateFileA, etc).Modification de la DLL C++ pour prendre en charge unicode - les pièges courants à éviter?

Je souhaite passer à l'utilisation des macros unicode/ascii définies dans VC++. Donc, au lieu de CHAR ou CHAR, j'utiliserais TCHAR. Pour char * j'utiliserais LPTSTR. Et je pense que des choses comme sprintf_s seraient changées en _stprintf_s.

Je n'ai jamais vraiment traité d'unicode auparavant, donc je me demande s'il y a des pièges courants que je devrais surveiller en faisant cela. Devrait-il être aussi simple que de remplacer les types et les noms de méthodes par les macros appropriées, ou y a-t-il d'autres complications à surveiller?

Répondre

4

d'abord lire cet article par Joel Spolsky: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

ensuite traité par ces liens sur StackOverflow: What do I need to know about Unicode?

En général, vous cherchez tout code qui suppose un caractère = un octet (mémoire/allocation de tampon, etc.). Mais les liens ci-dessus vous donnera un assez bon aperçu des détails.

Profitez,

Robert C. Cartaino

+0

La mémoire brute que je suis assez sur. Je suis plus préoccupé par les problèmes d'API Win que je pourrais rencontrer, ou par les cas d'angle qui pourraient ne pas être immédiatement évidents. – Herms

1

Le plus grand danger est susceptible d'être la taille des tampons. Si vos allocations de mémoire sont faites en termes de sizeof (TCHAR) vous serez probablement OK, mais s'il y a du code où le programmeur d'origine supposait que les caractères avaient 1 octet chacun et utilisaient des entiers dans les instructions malloc, c'est difficile de faire recherche globale pour.

+0

Juste grepped pour malloc et il est seulement utilisé à quelques endroits, et une seule fois pour un tampon de chaîne. new est utilisé dans la plupart des endroits (et je préfère qu'il soit utilisé partout, je n'aime pas les techniques d'allocation mixtes). Je pense que je suis couvert ici. – Herms

Questions connexes