Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)