Проблема с OutputDebugString

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Проблема с OutputDebugString

Сообщение vvvch » 26.04.2013 11:32:44

Это в программе
OutputDebugString(PChar('Привет! 12345 ABCDIFG'));

результат:
320237321200320270320262320265321202! 12345 ABCDIFG

На мой взгляд проблемы в кодировке UTF8 в ANSI (или что там Windows использует). Но как я не бился - не получается у меня вывести русские буквы. Или писать вывот латиницеё или... Что делать?

Добавлено спустя 56 минут 54 секунды:
Можно "отправить" в OutputDebugString любые коды, можно вообще написать свою ф-ю перекодировки... Но окно Журнала событий не выводит их в качестве русских букв. Латинские и цифры - да, а русские нет. Только коды. Что делать? Может я что неверно делаю?
Аватара пользователя
vvvch
постоялец
 
Сообщения: 105
Зарегистрирован: 26.04.2013 11:05:39
Откуда: г.Боровичи, Новг. обл.

Re: Проблема с OutputDebugString

Сообщение Vadim » 26.04.2013 14:46:02

vvvchvvvch
Если верить MSDN (это иногда можно делать :) ), эта функция существует исключительно для строк ANSI. Ну так и что ж Вы свою строку в ANSI-кодировку не перевели? Забыли?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Проблема с OutputDebugString

Сообщение vvvch » 26.04.2013 14:51:52

Не совсем забыл. Вообще-то я как только не переводил. Накопал, что это вообще не проблема Lazarus. Просто отладчик GDB (а он используется для отладки в Lazarus) выдаёт эти коды. Вот я сейчас и "копаю" как можно это исправить.

Добавлено спустя 8 минут 4 секунды:
И ещё OutputDebugString cуществует в двух видах OutputDebugStringA (это ANSI версия) и OutputDebugStringW (это для Юнисоде) В Delphi это не важно, вот в Lazarus. Но судя по тому, что я накопал - получается что в Дельфях свой отладчик и это он выдаёт русские буквы.
Аватара пользователя
vvvch
постоялец
 
Сообщения: 105
Зарегистрирован: 26.04.2013 11:05:39
Откуда: г.Боровичи, Новг. обл.

Re: Проблема с OutputDebugString

Сообщение Mr.Smart » 26.04.2013 15:05:19

По поводу
vvvch писал(а):OutputDebugString cуществует в двух видах OutputDebugStringA (это ANSI версия) и OutputDebugStringW (это для Юнисоде)

http://yvs-it.blogspot.ru/2010/05/outputdebugstring.html
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Проблема с OutputDebugString

Сообщение vvvch » 26.04.2013 18:12:29

Для Mr.Smart
Это всё конечно интересно, но проблему не решает...
А проблема такая: я так и не понял можно-ли и как вывести с помощью OutputDebugString (или другой ф-ии) русский шрифт. Было-бы удобно писать сообщения в Лог (Lazarus как и Delphi) такую возможность предоставляет, но ... Может как-то надо IDE настроить, или отладчик, или ещё что? Может кто сталкивался?
Аватара пользователя
vvvch
постоялец
 
Сообщения: 105
Зарегистрирован: 26.04.2013 11:05:39
Откуда: г.Боровичи, Новг. обл.

Re: Проблема с OutputDebugString

Сообщение Mr.Smart » 26.04.2013 21:17:30

Насколько знаю отладчик GDB все символы не относящиеся к первой половине видимых символов ASCII (от 0x20 до 0x7E) выводит в шестнадцатеричном виде.
Lazarus здесь не причём.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Проблема с OutputDebugString

Сообщение Vadim » 27.04.2013 11:26:05

В кодировке 1251 нормально русские буквы выводит. Вот, для примера составил такой опус:
Код: Выделить всё
Uses Windows;
Begin
  OutputDebugString('ля-ля-ля, la-la');
  WriteLn(7+8);
End.

Исходный файл в кодировке ср1251, т.к. заранее известно, что функция OutputDebugString любит только эту кодировку. И вот что получилось:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Проблема с OutputDebugString

Сообщение vvvch » 27.04.2013 13:30:16

Vadim как Вы этого добились??? Я "перевернул" весь Lazarus, пересмотрел все настройки у меня отладчик GDB после слова warning: выдаёт коды обычно начиная с 250 - 300 (где-то так) (десятичные коды педваряя символом "/"). Может версия отладчика? И ещё вопрос - Вы использовали отладчик отдельно от среды (IDE Lazarus)? Туда я ещё не копал...

Mr.Smart Я думал что можно настройками IDE настраивать (передавать GDB настройки). У меня не получилось никак. Но судя по тому что привёл в пример Vadim это можно. Короче я ничего не понимаю ("разрыв шаблона")... :-(

Добавлено спустя 1 час 57 минут 17 секунд:
Vadim
Я сделал Ваш пример, и вот что у меня вышло.

Добавлено спустя 10 минут 39 секунд:
А это с кодировкой cp1251 (первая была UTF8)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
vvvch
постоялец
 
Сообщения: 105
Зарегистрирован: 26.04.2013 11:05:39
Откуда: г.Боровичи, Новг. обл.

Re: Проблема с OutputDebugString

Сообщение Vadim » 27.04.2013 16:40:22

vvvch писал(а):как Вы этого добились???

Да если б я знал... :D
У меня версия 7.4, которая идёт вместе с fpc 2.6.2, а у Вас 7.2. Но я, честно говоря, не верю, чтобы была такая бешеная разница.
GDB я запускал из консоли.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Проблема с OutputDebugString

Сообщение vvvch » 27.04.2013 17:28:30

Vadim Хорошо, тогда попробуйте провести эксперимент. Откмпилируйте и запустите свою программу из под IDE Lazarus. Вывод OutputDebugString можно увидеть в журнале событий (меню Вид/Окна отладки/Журнал событий) (а если у Вас не будет вывода - в свойствах (параметрах) этого Журнала событий поставьте галку "Вывод"). Ещё то же самое вы увидите если откроете окно "Вывод отладчика" Просто там этот вывод предваряется словом "&warning" и его нужно найти среди множество всех сообщений отладчика. Пожалуйста, сообщите результат. А то мне придётся либо искать Lazarus с отладчиком версии 7.4 (и я, как и Вы не зню будет ли от этого эффект)

Добавлено спустя 4 минуты 48 секунд:
Так стоп! Вы пользуетесь Lazarus или Free Pascal? У меня в Lazarus используется Free Pascal 2.6.0 Может в этом дело?

Добавлено спустя 14 часов 27 минут 43 секунды:
В обшем так. Пролема всё-таки не решаема в принципе. Можно подобрать или написать ф-ю перекодировки символов из UTF8 в ANSI (стандартная UTF8ToAnsi так же как и UTF8Decode UTF8Encode - результата не дают) но это не главная проблема (я просто глубже не копал, а вообще это решается и не сложно) А проблема все-таки в IDE Lazarus она отказываится выводить резальтат (вывод GDB) в национальной кодировке. Выводит кодами всё что выше 127 да и многие символы ниже тоже выводятся кодами (это и писал Mr.Smart). Это очень странно учитывая что сама IDE сделана под национальные стандарты (у меня, например - русская) и это очень хорошо. Но несоответствие есть.
В общем всем спасибо, тема закрыта. "Претензии" к разработчикам IDE Lazarus. Недоработка однако ;-)

Добавлено спустя 5 часов 22 минуты 40 секунд:
P.S. Для нормального отображения русских букв при выводе GDB в окне DOS нужно использовать ф-ю UTF8ToCP866 из модуля LConvEncoding стандартной поставки Lazarus. Хотя это и не очень поможет т.к. сама среда всё равно их не отображает (отображает лиш коды).
Аватара пользователя
vvvch
постоялец
 
Сообщения: 105
Зарегистрирован: 26.04.2013 11:05:39
Откуда: г.Боровичи, Новг. обл.

Re: Проблема с OutputDebugString

Сообщение vvvch » 19.05.2013 17:51:22

Эта проблема решена в Версии 1.0.9 Ревизия SVN 41241 Дата 2013-05-19 (обещали и поздних версиях) (по край-мере я уже пользуюсь) можно скачать ftp://freepascal.dfmk.hu/pub/lazarus/sn ... -win32.exe
Аватара пользователя
vvvch
постоялец
 
Сообщения: 105
Зарегистрирован: 26.04.2013 11:05:39
Откуда: г.Боровичи, Новг. обл.


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 245

Рейтинг@Mail.ru