| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Еще вопрос про кодировки в ATL |
| Автор: Guest_Knave 10.3.2003, 05:53 |
| Есть текстовые свойства, хранятся в строках wchar_t в 2-х байтном формате. Проблема в том что при использовании объекта в VB русские буквы в даннх заменяются левыми символами, если использовать в С++ то все нормално. Если компилировать в юникод то в VB все нормально, а в C++ наоборот нет. Пробовал setlocale и _wsetlocale - приводит к аварийному завершению. setlocale использовал так setlocale(SC_ALL, "russian") Загрузка свойства значением производится так: // Компилируется не в юникод long len; ... if (m_lpRemoteName!=NULL) free(m_lpRemoteName); len=strlen(m_nrList[m_dwCurItem].lpRemoteName); // Тип LPTSTR m_lpRemoteName=(BSTR)malloc(len*sizeof(wchar_t)+2); // указатель на строку с данными свойства. Доступно свойство только на чтение mbstowcs(m_lpRemoteName, m_nrList[m_dwCurItem].lpRemoteName, len+1); Выдача значения свойства так: STDMETHODIMP CKnNREnum::get_RemoteName(BSTR *pVal) { *pVal=::SysAllocString(m_lpRemoteName); return S_OK; } Дополнительный вопрос - почему в VB значения свойства нормально возвращается так *pVal=::SysAllocString(m_lpRemoteName); а так происходит ошибка *pVal=m_lpRemoteName |