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