Показать сообщение отдельно
Старый 12.04.2011, 16:11   #12
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от KiriX Посмотреть сообщение
Только я что-то совсем не понимаю, где среди множества файлов PseuWoW - начало?
в любой программе на с/с++ "начало" это функция main

Цитата:
Сообщение от KiriX Посмотреть сообщение
Может, дело в том, что работаем мы с UTF8, а не cp1251? Я не нашёл нормального преобразователя с UTF8 для консоли...
а, ну если там используется UTF-8, то придется конвертировать текст из этой кодировки в OEM

Я как-то писал такую функцию, пример взят из MSDN, там идет сперва идет конвертация в юникод, а потом в 866.
Конечно можно написать функцию попроще, но эта работает и главное что она универсальная, можно ее за 5 сек исправить для преобразования любой другой кодировки опять же в любую другую -). Всего лишь поменять "CP_UTF8" и "866".
Да, и не забыть что строку после использования нужно удалять руками, или написать маленький класс обертку, для автоматического удаления буфера

Код:
char* str_utf8_to_866(BYTE *buf)
{
	wchar_t* pResw = 0;
	char* pRes = 0;
	int res_len = 0;
 
	res_len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)buf, -1, 0, 0);
	if (!res_len)
		return NULL;
 
	pResw = new wchar_t[res_len];
	if (!MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)buf, -1, pResw, res_len))
	{
		delete[] pResw;
		return NULL;
	}
 
	res_len = WideCharToMultiByte(866, 0, pResw, -1, 0, 0, 0, 0);
	if (!res_len)
		return 0;
 
	pRes = new char[res_len];
	if (!pRes)
		return NULL;
 
	if (!WideCharToMultiByte(866, 0, pResw, -1, pRes, res_len, 0, 0))
	{
		delete[] pRes;
		return NULL;
	}
	delete[] pResw;

	return pRes;
}

Последний раз редактировалось Йоха; 12.04.2011 в 16:16.
Йоха вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
KiriX (12.04.2011)