Шаг 181 - Подробнее о ресурсах

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

char *p="chars";

Эти слова в смысле прямо так и будут записаны в EXE модуль и, что самое страшное, будут загружены в оперативную память даже если никогда в программе не будут использованы !!! Такого не бывает ??? Бывает, Вы абсолютно уверены, что пользуетесь всеми возможностями того же Word. Наврядли и все эти диалоги, строки и так далее просто бы засоряли память, которой всегда мало. Операционная система она женского рода и страшное слово ЕЩЕ актуально и здесь.

Так вот ресурсы не загружаются в память вместе со всей программой, а лежат спокойно на диске пока их не попросят. Ну, например, в ресурсах у Вас шаблон диалогового окна. Этот шаблон так и будет на диске, а в момент создания он будет прочитан, после использования удален. Кроме того это позволяет не использовать огромное количество маленьких файлов икон, картинок и так далее для вашей программы.

У каждого ресурса бывает свой идентификатор, обычно он начинается, то есть должен начинаться, с IDD_ хотя вы можете это и изменить, но не надо.

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

Ресурсы можно разделить на два типа: двоичные и текстовые. Двоичные ресурсы это обычно растровые картинки, иконы, текстовые ресурсы кроме строк это и шаблоны диалоговых окон. В проекте VC++ двоичные ресурсы хранят в отдельных файлах. Ну, например, добавьте икону к ресурсам и в каталоге res проекта появится новый файл с расширением ICO. При сборке проекта текстовые и двоичные ресурсы будут объединены в один файл и просто добавятся к EXE файлу.

Да кстати, файл ресурсов - это текстовый файл и при необходимости его можно редактировать, например, в Notepad :-). При программировании на С в более ранних версиях приходилось этот файл заполнять ручками. На рисунке ниже изображено в какой момент сборки проекта производится подключение ресурсов.

181_1.gif (2517 b)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 8.05.2000