Nous migrons notre application COM C++ pour qu'elle soit unicode. Dans le cadre de cette migration, nous souhaitons également migrer les chaînes constantes de notre IDL vers unicode. Le problème est que pour le moment, nous le compilons toujours en ANSI et en UNICODE, ce qui signifie que nous ne pouvons pas utiliser la construction L "String" pour déclarer des diagrammes larges.Comment déclarer une constante de caractère large dans un IDL
Actuellement, notre constante de chaîne définie comme ceci:
const LPSTR STRING_CONST_NAME = "VALEUR STRING";
Et nous voulons le définir comme ceci:
const LP T STR STRING_CONST_NAME = "VALEUR STRING";
S'il était code régulier nous suffit d'ajouter les _T (« VALEUR STRING ») macro qui aurait converti à L « VALEUR STRING » lors de la compilation en unicode
Mais ce que je peux voir que nous pouvons » t l'utiliser dans l'IDL parce que _T est une construction C++ pure.
Notre approche est-elle correcte? Peut-être que nous devrions définir comme ce peu importe:
const LP T STR STRING_CONST_NAME = L "VALEUR STRING";
Nous les définissons comme consts parce que nous les consommons plus tard dans d'autres endroits de notre API. Plusieurs de nos méthodes API acceptent ces chaînes en tant que paramètres, et il est plus facile de les définir une fois dans l'API COM et de les consommer plus tard dans tous ses clients. Je vais vérifier ce que vous voulez dire en les définissant comme BSTR, c'est peut-être notre erreur depuis le début. –
Je considérerais les définir comme BSTR un bogue - BSTRs _must_ être alloué en utilisant SysAllocString. Les chaînes littérales à caractères larges ne sont pas des BSTR valides, car elles ne peuvent pas être préfixées en longueur. –