Как преобразовать _bstr_t в CString

Стоит отметить, что, если Вы идете взломанным путем, это возможно (вероятно?), что обновление iPhone OS уничтожило бы Вашу способность запустить эти приложения. Я пошел бы официальным путем и заплатил бы 99$, которые будут авторизованы. В дополнение к не необходимости волноваться о Ваших ударяемых приложениях, Вы также получаете возможность (должны Вы выбирать) выпускать Ваши приложения на хранилище.

12
задан sharptooth 6 November 2009 в 06:44
поделиться

3 ответа

Невозможно просто использовать это:

_bstr_t b("Steve");
CString cs;
cs = (LPCTSTR) b;

Я думаю, что это должно работать, когда проект использует Unicode.

18
ответ дан 2 December 2019 в 05:41
поделиться

Если вы компилируете для Unicode - просто назначьте инкапсулированный BSTR для CString. Если вы компилируете для ANSI, вам придется использовать WideCharToMultiByte () для преобразования.

Также помните, что инкапсулированный BSTR может иметь значение null, что соответствует пустой строке. Если вы не позаботитесь об этом, ваша программа будет работать с неопределенным поведением.

3
ответ дан 2 December 2019 в 05:41
поделиться

CString имеет конструкторы и операторы присваивания как для LPCSTR, так и для LPCWSTR, поэтому нет необходимости вызывать WideCharToMultiByte, и вы не можете ошибиться при приведении типов в режимах Unicode или не-Unicode.

Вы можете просто назначить строку следующим образом:

csError = bstrErr.GetBSTR ();

Или используйте конструктор CString csError (bstrErr.GetBSTR ());

Я использую GetBSTR. Это то же самое, что преобразование bstrErr с (LPCWSTR), но я предпочитаю его для удобства чтения.

6
ответ дан 2 December 2019 в 05:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: