Невозможно прочитать русскую строку с _stprintf - PullRequest
1 голос
/ 26 июля 2011

У меня есть следующий код, чтобы присвоить найденное имя платы FireWire TCHAR переменная.

TCHAR* firewireName = new TCHAR[wcslen(variantProperty.bstrVal)+1];
_stprintf(firewireName, _T("%S"), variantProperty.bstrVal);             
VariantClear(&variantProperty);

но когда имя firewire на русском LSI 1394 OHCI совместимый хост-контроллер В переменной firewireName содержится только LSI 1394 OHCI

Я n00b в C ++, что-то не так в коде?

1 Ответ

3 голосов
/ 26 июля 2011

Да.Много.Вкратце.

Во-первых, BSTR - это не то, что ожидается от семейства функций printf.BSTR имеют префикс по длине, и printf будет ожидать NULL-терминатор.Это также помечает ваше использование wcslen как неправильное.

Во-вторых, вы не смогли использовать какое-либо правильное управление памятью.

Вам необходимо использовать SysStringLen , чтобы получитьдлина, а затем сохранить результат в буфере C ++, который гарантированно освобождает себя.ATL предоставляет класс CComBSTR , который должен добиться цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...