CString в WCHAR
От: Aleks  
Дата: 07.05.02 22:41
Оценка:
Если нетрудно подскажите как корректно перевести CString в WCHAR, я сделал при помоши swprintf
(
CХХХDoc* pDoc=GetDocument();
...
WCHAR filename[100];
...
swprintf(filename, L"%S",pDoc->GetPathName());//GetPathName — тот самый CString возврашает...
)
в принципе работает, но когда встречаються русские буквы — глючит ... может у меня где "раскладка" не подключена ... одним словом подскажите, что не так ...
Если ничто другое не помогает, прочтите, наконец, инструкцию!
Re: CString в WCHAR
От: Андрей Россия  
Дата: 08.05.02 03:15
Оценка:
Здравствуйте Aleks, Вы писали:

skip

A>в принципе работает, но когда встречаються русские буквы — глючит ... может у меня где "раскладка" не подключена ... одним словом подскажите, что не так ...


Попробуй макросы USES_CONVERSION и T2W и ему подобные — за ними вроде таких глюков не замечалось
Re: CString в WCHAR
От: OlegO Россия http://www.mediachase.ru
Дата: 08.05.02 05:36
Оценка:
Здравствуйте Aleks, Вы писали:

A>Если нетрудно подскажите как корректно перевести CString в WCHAR, я сделал при помоши swprintf

A>(
A>CХХХDoc* pDoc=GetDocument();
A>...
A>WCHAR filename[100];
A>...
A>swprintf(filename, L"%S",pDoc->GetPathName());//GetPathName — тот самый CString возврашает...
A>)
A>в принципе работает, но когда встречаються русские буквы — глючит ... может у меня где "раскладка" не подключена ... одним словом подскажите, что не так ...

Можно использовать метод BSTR CString::AllocSysString() const
получится BSTR, правда в данном случае он мало отличается от WCHAR*
Можно его скопировать в WCHAR буфер, ну и не забыть очистить его используя SysFreeString.

В крайнем случае можно посмотреть реализацию, этого метода:

BSTR CString::AllocSysString() const
{
#if defined(_UNICODE) || defined(OLE2ANSI)
    BSTR bstr = ::SysAllocStringLen(m_pchData, GetData()->nDataLength);
    if (bstr == NULL)
        AfxThrowMemoryException();
#else
    int nLen = MultiByteToWideChar(CP_ACP, 0, m_pchData,
        GetData()->nDataLength, NULL, NULL);
    BSTR bstr = ::SysAllocStringLen(NULL, nLen);
    if (bstr == NULL)
        AfxThrowMemoryException();
    MultiByteToWideChar(CP_ACP, 0, m_pchData, GetData()->nDataLength,
        bstr, nLen);
#endif

    return bstr;
}
С уважением, OlegO.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.