Работаем с ресурсами

Рано или поздно любой человек, программирующий под Windows (имеется в виду платформа Win32), сталкивается с необходимостью работы с ресурсами. Когда настанет этот момент - в первую очередь, зависит от среды разработки и библиотек, которыми программист пользуется. Некоторые ориентированы на работу непосредственно с ресурсами с самого начала, другие же позволяют в большинстве случаев обойтись и без них. Однако когда возникает необходимость отредактировать какой-то ресурс, как раз последние среды разработки не могут похвастаться удобными редакторами. В этой статье, как вы, наверное, уже догадались, мы поговорим о ресурсах. И о том, как с ними можно работать с максимальным комфортом.


Что такое ресурсы

Если вы уже достаточно программировали под Win32, то не можете не знать, что такое ресурсы. Однако у начинающих программистов этот термин нередко вызывает вопросы, поэтому, думаю, будет нелишним напомнить (или объяснить), что мы имеем в виду, когда говорим "ресурс".

Ресурсы - это данные, помещённые в специально отведённую для них область исполняемого файла. Как известно, исполняемые файлы могут содержать не только программный код, но и данные. В ОС такие файлы Windows разбиты на секции. Если данные находятся в секции, отведённой для ресурсов, значит, это ресурсы. Чем ресурсы отличаются от любых остальных данных внутри EXE-файла? Собственно, только тем, что система предоставляет программисту специальные функции для работы с ними.

Традиционно выделяют разные типы ресурсов. К стандартным относятся значки (иконки), курсоры для мыши, bitmap-картинки, строки и таблицы строк, комбинации "горячих" клавиш (accelerators), меню, диалоговые окна и информация о версии приложения. Существует также специальный тип ресурсов под названием RCDATA, позволяющий добавить в программу любые данные, не подходящие под приведенную выше классификацию, и работать с ними тоже как с обычными ресурсами.

 


Для чего они нужны

"Классическое" программирование под Win32, давно ставшее анахронизмом, предусматривает такой подход к созданию приложений, при котором ресурсы используются более чем интенсивно. Однако в большинстве сред разработки, с которыми поставляются фирменные библиотеки для создания пользовательского интерфейса, ресурсы задействованы не совсем так, как предлагали создатели операционной системы. Например, в Borland Delphi и C++ Builder все формы (окна) и всё, что на них, включая меню и таблицы "горячих" клавиш, находятся в секции RCDATA в виде специального текстового описания формы.

Собственно, в связи с этим может возникнуть один довольно здравый вопрос: а в чём вообще смысл использования ресурсов? Ведь можно прекрасно создать меню и диалоговые окна прямо по ходу работы приложения, с помощью стандартных функций Win32 API. Зачем же усложнять всё, создавая сначала ресурсы, а уже после вызывая их из приложения? Ответ довольно прост. Вынесение всех описанных выше видов ресурсов в отдельную часть исполняемого файла облегчает задачу по их изменению в уже скомпилированной программе. Согласитесь, изменить содержимое ресурса с помощью специального редактора намного легче, чем её дизассемблировать и менять ассемблерный код. Однако тут же возникает ещё один вопрос, тоже вполне логичный. Зачем может понадобиться изменение ресурсов? Самый простой пример - локализация программы. Для перевода интерфейса программы на другой язык достаточно воспользоваться редактором ресурсов, причём сделать это может даже человек, достаточно далёкий от программирования. А пользователи любят локализованные программы...


Инструментарий

Для работы с ресурсами, естественно, нужен специальный инструментарий. Его можно разделить на несколько видов: WYSIWYG1-редакторы ресурсов, компиляторы ресурсов и редакторы ресурсов, которые работают с исполняемыми файлами.

До того, как ресурс попадёт в исполняемый файл, он может пребывать в двух состояниях: в виде скрипта или в виде скомпилированного файла ресурсов. Файлы со скриптами - текстовые файлы с расширением RC, имеющие внутри себя текст на языке Resource Script. Компиляторы ресурсов преобразуют скрипты в двоичный формат, с которым умеют работать компоновщики исполняемых файлов. Компилятор ресурсов есть практически в каждом пакете для программирования. Например, в GNU Compiler Collection для Windows этот компилятор называется Windres.exe.

С WYSIWYG-редакторами работать, конечно же, на порядок проще, чем писать скрипты в блокноте. Картинки в них рисовать, естественно, не так удобно, как в Adobe Photoshop, но в плане редактирования меню, диалогов, да и иконок с курсорами всё не так уж и плохо. В них ресурсы можно редактировать, как правило, и в виде скриптов, и в скомпилированном двоичном виде. Таких программ, к счастью тоже немало. Наиболее хорошо знаком программистам, пожалуй, редактор ресурсов из Microsoft Visual Studio. Есть также Borland Resource Workshop, которому сто лет в обед, а в последних версиях сред разработки от Borland его уже не видно и не слышно.

Программы, которые умеют работать с ресурсами в исполняемых файлах, как правило, тоже имеют некоторые зачатки WYSIWYG. Дальше всех в этом направлении продвинулся Resource Hacker, но и остальные тоже не так уж плохи.


Resource Builder от SiComponents

А сейчас я хотел бы рассказать о программе, которая в приведенной классификации попадает сразу во все три категории и имеет как WYSIWYG-дизайнер, так и компилятор ресурсов. Умеет при этом работать и со скриптами, и с двоичными файлами ресурсов, и с исполняемыми файлами. Название программы, как вы уже догадались, - ResourceBuilder, а найти в интернете её можно по адресу www.resource-builder.com или www.sicomponents.com. Программа, правда, платная, но это, пожалуй, тот самый случай, когда продукт действительно заслуживает сотни "вечнозелёных", которую за него просят разработчики.

После скачивания пробной версии и её установки вы сможете запустить программу и увидеть примерно то же самое, что содержит скриншот к статье. В целом, по моему скромному мнению, интерфейс достаточно удобный и симпатичный.

Разработчики Resource Builder'а утверждают, что это единственный WYSIWYG-редактор ресурсов, поддерживающий Unicode-ресурсы, в том числе и RC-скрипты в этой кодировке. Кроме того, программа поддерживает и 16-битные, и 32-битные скомпилированные файлы ресурсов, аналогично и исполняемые файлы. Также присутствует поддержка изменения ресурсов без перекомпиляции исполняемого файла, которая, по существу, является стандартной и реализована во многих программах, однако это ничуть не умаляет полезности данной функции. Что интересно, Resource Builder умеет работать и с ресурсами компонентов Delphi/C++ Builder.

Графический редактор, встроенный в Resource Builder, по своим возможностям просто-таки близнец Paint'а. В то же время, в отличие от многих других редакторов, он поддерживает редактирование изображений любого размера и с любой глубиной цвета. В справке написано, что программа умеет работать не только со стандартными BMP-картинками, но и с изображениями в формате JPEG. Однако с такими ресурсами нельзя будет работать теми же системными средствами, что и с BMP, поэтому лично мне эта возможность не кажется такой уж полезной.

Зато интересная особенность Resource Builder'а - поддержка работы с формами Delphi и C++ Builder. С ними можно работать в текстовом виде, причём редактор имеет подсветку синтаксиса для них. А если у вас на компьютере установлены Delphi 6 или 7, или же C++ Builder 6, то можно воспользоваться их средствами для визуального редактирования форм. Если при этом указать все дополнительные компонентные библиотеки (BPL), то работа с формами будет совсем комфортной.

С редактированием стандартных диалоговых ресурсов тоже никаких проблем нет. Resource Builder поддерживает как стандартные элементы, предоставляемые Windows, так и позволяет осуществить подключение сторонних библиотек с элементами управления. Причём одна такая библиотека поставляется вместе с самим Resource Builder'ом. Она, правда, небольшая и содержит всего две кнопки, но зато снабжена исходными текстами, так что каждый желающий сможет создать на её основе свою библиотеку элементов управления.

Вместе с Resource Builder поставляется и консольный компилятор ресурсных скриптов, поэтому те, кто хочет компилировать ресурсы из командной строки, также будут иметь возможность это сделать. Языковые возможности компилятора полностью совпадают с возможностями визуального редактора ресурсов, так что все ресурсные скрипты, созданные с помощью Resource Builder'а, полностью с ним совместимы.

Ресурсы в программе можно поместить в специальную ресурсную DLL-библиотеку, причём для того, чтобы сделать это, не требуется никаких сторонних инструментов. Одним движением руки в программу или в ресурсный файл можно добавить XP Manifest (специальный ресурс, обеспечивающий поддержку визуальных стилей Windows XP). Для удобства пользователя в Resource Builder'е имеется поддержка многоязычного интерфейса, причём русский язык включён в дистрибутив пробной версии программы. Также стоит отметить присутствие "Мастера настроек", который можно в любой момент вызвать из меню "Инструменты". С его помощью можно быстро настроить самое важное, не вникая в детали всех настроек, которых в Resource Builder'е не так уж и мало.

Таким образом, в качестве подведения итогов хочу сказать, что Resource Builder - самый качественный из встреченных мною инструментов для работы с ресурсами. В этом он может дать фору даже такому монстру, как Visual Studio. А уж о таких программах, как Borland Resource Workshop или Borland Image Editor, и говорить нечего. Поэтому рекомендую его всем, кто страдает от недостатков того редактора ресурсов, которым пользуется.

Вадим СТАНКЕВИЧ


1 WYSIWYG - What You See Is What You Get, т.е. в редакторе всё выглядит так же, как будет выглядеть при работе программы

Версия для печатиВерсия для печати

Номер: 

37 за 2006 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!