Как уменьшить широкую константу в IDL - PullRequest
0 голосов
/ 23 августа 2009

Мы переносим наше C ++ COM-приложение в Unicode, и в рамках этой миграции мы хотим также перенести строки констант в нашей IDL в Unicode.

Проблема в том, что на данный момент мы по-прежнему компилируем его как в ANSI, так и в UNICODE, что означает, что мы не можем использовать конструкцию L "String" для объявления широких диаграмм.

На данный момент наша строковая константа определена так:

const LPSTR STRING_CONST_NAME = "STRING VALUE";

И мы хотим определить это так:

const LP T STR STRING_CONST_NAME = "STRING VALUE";

Если бы это был обычный код, мы бы просто добавили макрос _T ("STRING VALUE"), который преобразовал бы его в L "STRING VALUE" при компиляции в Unicode

Но из того, что я вижу, мы не можем использовать его в IDL, потому что _T является чистой конструкцией C ++.

Правильный ли наш подход? Может быть, мы должны определить это так, несмотря ни на что:

const LP T STR STRING_CONST_NAME = L"STRING VALUE";

Ответы [ 2 ]

2 голосов
/ 23 августа 2009

Интересно, зачем вам нужны строковые константы в файле IDL? Разве не было бы достаточно иметь их в заголовочном файле? Я вижу, что Microsoft имеет широкие строковые литералы только в sapiaut.idl (просматривая все файлы IDL платформы SDK); поскольку эти несколько констант никогда не используются, это также могло быть ошибкой. Также обратите внимание, что эти константы определены как BSTR.

Если вы хотите, чтобы они были в файле IDL, их может быть достаточно для cpp_quote.

Если вы действительно хотите, чтобы они были в IDL буквально, вы можете использовать #ifdef, чтобы иметь два разных определения. В этом случае у вас также должны быть две разные библиотеки типов, с отдельными наборами интерфейсов, с разными UUID и т. Д.

0 голосов
/ 23 августа 2009

Если предполагается, что это всегда Unicode, то нет смысла использовать конструкции "T" - просто сделайте;

  const LPCWSTR STRING_CONST_NAME = L"STRING VALUE";

"W" для "широкого" -

Не уверен, как определенные в Windows LPC * STR typedefs взаимодействуют с IDL, но если LPSTR сработал, большое разнообразие должно работать тоже.

...