| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Не собирается проект с русскими буквами |
| Автор: Anikmar 20.9.2009, 20:36 | ||
| Для проверки свох dll, созданых на билдере установил Dev C++ (чтобы проверять сторонней штукой). Ни разу не видел - первые впечатления самые благоприятные. Очень легкая и быстрая штука. Окошки на нем рисовать долго, поэтому проверяю из консоли. И вот с чем столкнулся: Если работаю с типом wchar_t, то работает сие только если внутри строки английские буквы. т.е.
Ошибка: Illegal byte sequence Как я понял ругается линкер. Как его уговорить? Где что подкрутить? |
| Автор: zim22 20.9.2009, 20:52 | ||
http://oleg.in-da.ru/dev/cpp/converting_to_execution_character_set_-_illegal_byte_sequence |
| Автор: Anikmar 20.9.2009, 21:01 |
| zim22, спасибо, конечно. Но как с этим бороться? Можно все и по-англицки писать, но проблема в том, что многие мои проверяемые функции из DLL шлют имено wchar_t строки. И этот поросенок (компилятор) напрочь не хочет их выводить. Под отладчиком вроде похоже на правду, но не под отладчиком же все смотреть! Думаю, что если победю эту ошибку, то и вывод наладится. А вот с чем это может быть связано пока не врублюсь - там настроек то три штуки, тут где-то в другом месте подкручивать надо. Чую, что литр, а доказать - не могу. Dev же с *nix вроде как в винду пришел, а они любители всякие настроечные файлы создавать. Может он где-то рядом? |
| Автор: zim22 20.9.2009, 21:10 | ||
у меня DevCPP нет под рукой. Вот как это лечится в Code::blocks:
http://forums.codeblocks.org/index.php?topic=4768.195 *** может CodeBlocks поставишь вместо DevCPP? http://downloads.sourceforge.net/codeblocks/codeblocks-8.02mingw-setup.exe(19.3 Mb) |
| Автор: Anikmar 20.9.2009, 21:14 |
Эх, если бы в Dev C++ был такой замечательный пункт в настройках проекта... (Либо если он есть и я бы знал где он находится...) Я сначала думал, что это можно только при создании нового проекта указать. Создал еще один - ни фига, та же хрень. Блин - столько времени на ерунду теряю, стыдно даже. Не окна же рисовать - запарно вручную! Хотел на студии проверить - но она мертво упала, надо переустанавливать, а это тоже гоноболь еще та. Может еще что-нибудь легкое и хорошее типа DevC++ есть? |
| Автор: zim22 21.9.2009, 08:08 |
Code::blocks |
| Автор: Anikmar 21.9.2009, 08:11 |
Это что? И с чем едят? |
| Автор: zim22 21.9.2009, 08:13 |
это улучшенный devcpp http://www.codeblocks.org/ |
| Автор: Anikmar 21.9.2009, 08:17 |
| Попробую с ним. Вообще странная фишка. Я посмотрел - с ней многие столкнулись, но нигде не смог найти решения. Правда на одном китайском форуме вроде что-то интересное проскакивало, но ответ был в иероглифах, а в них я гораздо хуже, чем в английском. Прямо скажем намного хуже. Вернее совсем никак. |
| Автор: zim22 21.9.2009, 08:19 |
только качай версию с уже встроенным mingw. она лучше. выше я уже давал http://forum.vingrad.ru/index.php?showtopic=273563&view=findpost&p=1972445 |
| Автор: Anikmar 21.9.2009, 08:42 | ||
| Установил. Код:
При первой попытке - та же ошибка. Но здесь есть настройки редактора. Поставил кодировку UTF-8 - ошибка исчезла, правда строчка не выводится. Попробовал UTF-32, default - таже фигня. Т.е. wprintf выдает пустую строку. В принципе сдвиг ощутимый - по крайней мере уже поэкспериментировать можно. |
| Автор: ller 21.9.2009, 08:44 |
| Есть еще CodeLite тот же Code::Block только вид сбоку. Я ей пользуюсь. У лайта вид похуже чем у блока, но вроде как блок в прошлом году вышел последний. |
| Автор: zim22 21.9.2009, 08:49 | ||||||||
| Anikmar, что-то ты не то делаешь. со случаем
я боролся так: Codeblocks-Create New Project-Console Application-Next-C++-NEXT-NEXT-NEXT... клацаем слева на файле main.cpp (в папке Sources)
добавляем строку wprintf(L"Привет!"); билдим (CTRL+F9) получаем ошибку
добавляем кодировку
и всё. ошибки нет. всё отлично. в чём проблема? |
| Автор: Anikmar 21.9.2009, 09:00 |
Ага, я это не добавил. Теперь добавил - ошибки нет, получаю в консоли крякозябры. Это прогресс, уже лучше. Думаю крякозябры из-за того, что менял кодировку в редакторе. Ща проверю на новом проекте. |
| Автор: mrbrooks 21.9.2009, 09:04 | ||
| используйте C# - в нем таких проблем нет Anikmar, кстати камрад - ради спортивного интереса проверь - как оно вот так:
|
| Автор: Anikmar 21.9.2009, 13:50 |
| В общем при помощи дополнительного флага компилятора -finput-charset=iso-8859-1 проблема решилась. Крякозябры пока не победил - ни один из известных мне способов пока не помог, думаю разберусь. В общем тему закрываю. |
| Автор: mrbrooks 21.9.2009, 13:53 | ||
Ужос. Я люблю M$ VS. Учитывая, что есть EE. Ага. Нововая ценовая политика просто супер. Дебилдер "фтопку"! |
| Автор: zim22 21.9.2009, 16:08 |
я его тоже люблю. но иногда полезно прогнать исходник через разные компиляторы. |
| Автор: ller 21.9.2009, 22:24 | ||
У меня компилирует, только ничего не выводит, а с ключом -finput-charset=iso-8859-1 получаю вот что.
Добавлено через 53 секунды А на счет кракозябров, попробуй вместо -finput-charset=iso-8859-1 что то типа -finput-charset=cp866 для консоли |
| Автор: Anikmar 22.9.2009, 00:16 | ||
Все дело в том, что нормального рецепта работы wprintf я не нашел. SetLocale у меня никакого особого эффекта не произвело. Устав с экспериментами я просто перевожу wchar_t в char, затем использую CharToOem. |
| Автор: bsa 22.9.2009, 13:42 | ||
Ну тогда уж cp1251, так как текст программы вряд ли в консоли набирается. |
| Автор: Anikmar 22.9.2009, 18:04 | ||
| Вся эта фигня мне нужна именно затем, чтобы вывести в консоль именно wchar_t. С обычным выводом все в порядке. Конкретно Dev кодирует Unicode в обычный 1251. Проверил опытным путем. Т.е. функция вывода Unicode текста в консоль выглядит так и я пока ей пользуюсь:
|