• Добро пожаловать на WYLEK.ru. Пожалуйста, войдите или зарегистрируйтесь.
 

Программа для ЧПУ

Автор yaesu-103, 22 января 2015, 15:39:00

« предыдущая - следующая »

yaesu-103Автор темы

Ситcема Windows8 X64. Имеется EXE-шник   ftp://ftp.lenze.de/AKB/GDC_V414.zip. Программа для управления частотными приводами.
 После установки программы в папке Bin есть две dll.  res044.dll и res049.dll
 Вот эти dll-ки          http://rusfolder.net/files/42176053            http://rusfolder.net/files/42176054.     (42176053) (42176054)
 

Подскажите что делаю не так. В любом редакторе ресурсов я вижу вот это



Так выглядят диалоговые окна. А меню программы отображается на русском.



Это после HEX редактора



После HEX редактора в Radialix-е. Вот попробовал в HEX редакторе. Получается что меню программы в кодировке UTF-16 а диалоговые окна в ANSI такое возможно ???????


Leserg

22 января 2015, 15:41:00 #1 Последнее редактирование: 29 июля 2018, 18:29:21 от WYLEK
Цитата: yaesu-103;13854ну неможет быть меню строки с поддержкой кириллицы, а диалоги без.

Чё не может? Программа - это интелектуальная разработка программиста или группы программистов, в которой реализованы определеные алгоритмы для выполнения каких-то конкретных задач. Наваять можно что угодно, в зависимости от уровня подготовки и опыта работы отдельно взятого программиста.

В этой программе для строк меню используется кодировка Unicode, а для строк диалоговых окон - ANSI. Так как исходная строка имеет кодировку Unicode, то выполняется конвертация из Unicode в ANSI. Для символов латинского алфавита преобразование можно сделать элементарно: у каждого символа просто удаляется второй байт, который является нулевым. Например, возьмем строку "&Drive". В кодировке Unicode, в НЕХ-коде, она выглядит так:

260044007200690076006500

Здесь на каждый символ отводится два байта, т.е. к примеру символ D - 4400, и у символов латинского алфавита второй байт всегда нулевой. Чтобы преобразовать строку в ANSI нужно просто удалить нулевые байты и получим НЕХ-код вида

264472697665

Это будет та же строка "&Drive", но уже в кодировке ANSI. Это самый простой и быстрый способ преобразования строки из одной кодировки в другую. Причем, для строк латинского алфавита он прекрасно работает как в одну сторону, так и в другю (Unicode <-> ANSI). Посмотрите на код строки в утилите "1251 to НЕХ", он одинаковый во всех кодировках:



А вот с другими языками, символы которых отличаются от латиницы, такой финт не пройдет. Переведем строку на русский - "&Привод". В кодировке Unicode, в НЕХ-коде, она выглядит так:

26001F044004380432043E043404

По сказанному выше алгоритму преобразования удалим у каждого символа второй байт и получим код

261F4038323E34

Но если вы посмотрите на код этой строки для кодировки ANSI, то увидите там совершенно другую картину

26CFF0E8E2EEE4



Как видите, 261F4038323E34 (& @82>4) это совсем не 26CFF0E8E2EEE4 (&Привод). Вот и получается в программе вместо нормальных строк ерунда.

Я не знаю, какой алгоритм преобразования строк использовал программист, и показал вам один из возможных вариантов. Почему он (программист) поступил таким образом, мы никогда не узнаем. Но разрешить подобную ситуацию в данном случае можно.

Для диалоговых окон перевод строки необходимо записывать символами кодовой страницы windows-1252, т.е. в нашем понимании - кракозябрами. Например, строка "&Отмена" -> "&Ioiaia". Применительно к редактору Radialix, это будет выглядеть следующим образом:



Тогда в работающем приложении будет все корректно



Неудобство такого способа - это невозможность прямого редактирования строк в случае опечаток, неточностей перевода и т.д. Нужно будет отдельно пользоваться текстовым редактором, в котором можно просто переключать кодировку. Например, AkelPad

Скопировали из Radialix"a строки в текстовый редактор (кодировка windows-1251)



Потом переключили кодировку на windows-1252



Получили кракозябры. Теперь переносим строки обратно в Radialix. Все.

Другой вариант более сложный. Нужно найти в программе код, где выполняется преобразование строк и сделать в нем соответствующие изменения, если это возможно. К сожалению, в этом варианте я вам пока ничем не могу помочь.
Кто ищет, тот всегда найдет!

yaesu-103Автор темы

Вот спасибо большое, всё разложил по полочкам.
 А то я уже не один месяц бьюсь с этой прогой. Я начинающий в этом деле.  Только вчера пришёл к выводу что кодировки разные. (первый раз с таким столкнулся)
 Я попробовал в HEX редакторе править а потом напрямую открыть не в Radialixe (там были кракозябры) а в самой проге.

 аталог@MAIL.RU - каталог ресурсов интернет Яндекс.Метрика