Question

Nous émigrons notre application C ++ COM être unicode, et dans le cadre de cette migration, nous voulons migrer les chaînes constantes dans notre IDL à unicode ainsi.

Le problème est que pour le moment, nous compilons encore à la fois dans la norme ANSI et UNICODE, ce qui signifie que nous ne pouvons pas utiliser la L « String » construire à déclarer des graphiques larges.

À l'heure actuelle, 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 de chaîne";

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 dans unicode

Mais ce que je peux voir que nous ne pouvons pas l'utiliser dans le IDL parce _T est un pur C ++ construire.

est notre approche correcte même? Peut-être que nous devrions définir comme ce peu importe:

const LP T STR STRING_CONST_NAME = L "valeur de chaîne";

Était-ce utile?

La solution

Je me demande pourquoi vous avez besoin d'avoir des constantes de chaîne dans le fichier IDL, de toute façon. Ne serait-il pas suffisant de les avoir dans un fichier d'en-tête? Je vois que Microsoft a de larges littéraux de chaîne uniquement dans sapiaut.idl (regardant tous les plate-forme SDK fichiers IDL); comme ces quelques constantes ne sont jamais utilisées, cela aurait pu être une erreur, aussi bien. Notez également que ces constantes sont définies comme BSTR.

Si vous voulez dans le fichier IDL, il pourrait être suffisant pour les cpp_quote.

Si vous voulez absolument les dans le IDL littéralement, vous pouvez utiliser un #ifdef avoir deux définitions différentes. Dans ce cas, vous devriez également avoir deux bibliothèques de types différents, avec des interfaces séparées ensembles, avec différents UUID, et ainsi de suite.

Autres conseils

S'il est censé toujours Unicode, il n'y a pas d'utilisation en utilisant le « T » construit - il suffit de faire;

  const LPCWSTR STRING_CONST_NAME = L"STRING VALUE";

"W" est pour "large" -

Je ne sais pas comment le PLC défini Windows * STR typedefs interaction avec IDL, mais si LPSTR a travaillé, la grande variété devrait fonctionner aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top