Мы переносим наше приложение C++ COM в unicode, и в рамках этой миграции мы хотим также перенести константные строки в нашем IDL в unicode.Как объявить широкую константу char в IDL
Проблема в том, что в настоящий момент мы все еще собираем ее как в ANSI, так и в UNICODE, что означает, что мы не можем использовать конструкцию L "String" для объявления широких диаграмм.
На данный момент наша строковая константа определяется следующим образом:
Const LPSTR STRING_CONST_NAME = "строковое значение";
И мы хотим, чтобы определить его как это:
сопзЬ LP T STR STRING_CONST_NAME = "строковое значение";
Если бы регулярный код, который мы бы просто добавить _T («строковое значение») макрос, который бы превратил его в L «строковое значение» при компиляции в юникоде
Но от того, что я могу видеть, что мы можем» t использовать его в IDL, потому что _T является чистой конструкцией C++.
Является ли наш подход даже правильным? Может быть, мы должны определить его, как это ни на что:
Const LP T STR STRING_CONST_NAME = L «строковое значение»;
Мы определяем их как consts, потому что мы их потребляем позже в других местах нашего API. Многие из наших методов API принимают эти строки как параметры, и их проще определить один раз в COM-api и использовать их позже во всех своих клиентах. Я проверю ваш вопрос об определении их как BSTR, который, возможно, был нашей ошибкой с самого начала. –
Я бы назвал их BSTR ошибкой - BSTRs _must_ будет выделен с использованием SysAllocString. Строковые строки с широким символом недействительны BSTR, так как они не могут быть префиксом длины. –