Здравствуйте, Pavel Dvorkin, Вы писали:
PD>CharToOem
PD>OemToChar
Хорошо это я уловил. Спасибо всем кто насоветовал. Теперь, чтобы не вставлять везде эту конвертацию я решил написать свой codecvt<...>, который перед выводом будет делать всю работу. Идея с пайпом показалась мне несколько сложноватой.

Так вот фиг вам. У меня ни как не получается его прикруть к потоку.
Сделал так.
class MyCodeCVT : public std::codecvt<char, char, mbstate_t>{
typedef std::codecvt<char, char, mbstate_t> base_t;
public:
explicit MyCodeCVT(size_t r = 0): base_t(r){}
protected:
virtual result do_out(mbstate_t& __state,
const char* from,
const char* from_end,
const char*& from_next,
char* to,
char* to_limit,
char*& to_next) const
{
ptrdiff_t len = (std::min) (from_end - from, to_limit - to);
CharToOemBuff(from, to, len);
from_next = from + len;
to_next = to + len;
return ok;
}
};
std::string test("Строчка по-нашему");
int _tmain(int argc, _TCHAR* argv[])
{
std::locale loc(std::locale(), new MyCodeCVT);
std::cout.imbue(loc);
std::cout<<test<<std::endl;
return 0;
}
Метод do_out не вызывается. Я подозреваю, что просто не установился мой фасет