Добрый день!
Пишу СОМ-клиента на MS VC6. Сервер вернул в переменную VARIANT строку.
Фрагмент кода выглядит примерно так:
VARIANT pVarResult;
pVarResult.vt = VT_BSTR;
hresult = pdisp->Invoke(..., ... , ..., ..., ..., &pVarResult, ..., ...);
cout<<"Строка : "<<(char*)pVarResult.bstrVal<<endl;
________________________________________________________________________________
В результате печатается первый символ полученной строки (если строка состоит из латинских символов)
либо "мусор" (если строка на русском).
Подскажите, пожалуйста, как вывести
полную строку, причем
на русском.
Здравствуйте Dimman, Вы писали:
Я бы посоветовал так:
D>D>VARIANT pVarResult;
D>pVarResult.vt = VT_BSTR;
D>hresult = pdisp->Invoke(..., ... , ..., ..., ..., &pVarResult, ..., ...);
D>cout<<"Строка : "<<(char*)_bstr_t(pVarResult.bstrVal)<<endl;
D>
D>________________________________________________________________________________
Здравствуйте Nikto, Вы писали:
N>Здравствуйте Dimman, Вы писали:
N>Я бы посоветовал так:
D>>D>>VARIANT pVarResult;
D>>pVarResult.vt = VT_BSTR;
D>>hresult = pdisp->Invoke(..., ... , ..., ..., ..., &pVarResult, ..., ...);
D>>cout<<"Строка : "<<(char*)_bstr_t(pVarResult.bstrVal)<<endl;
D>>
D>>________________________________________________________________________________
Я бы посоветовал сделать так:
_variant_t VarResult;
try
{
VarResult = pdisp->Invoke(..., ... , ..., ..., ..., ..., ...);
}
catch(const _com_error & e)
{
...
}
cout<<"Строка : "<<_bstr_t(pVarResult.bstrVal)<<endl;//Здесь явно приводить к char* не надо
Здесь pdisp объявлен как IDispatchPtr
Спасибо за внимание к моей проблеме.
Предложенные варианты великолепно работают!
Только с русскими символами проблема прежняя — нечитабельно
Здравствуйте Dimman, Вы писали:
D>Спасибо за внимание к моей проблеме.
D>Предложенные варианты великолепно работают!
D>Только с русскими символами проблема прежняя — нечитабельно
А это уже вопрос про вывод в консоль русских букв

. Воспользуйся поиском — не раз обсуждалось...
Здравствуйте Dimman, Вы писали:
D>Спасибо за внимание к моей проблеме.
D>Предложенные варианты великолепно работают!
D>Только с русскими символами проблема прежняя — нечитабельно
Попробуй использовать wcout.
Вначале прошипи:
std::wcout.imbue(std::locale("Russian_Russia.866"));
Здравствуйте Nikto, Вы писали:
N>А это уже вопрос про вывод в консоль русских букв
. Воспользуйся поиском — не раз обсуждалось...
Действительно обсуждалась
Блеск, спасибо!