DLL с JPEG и другими ресурсами
- составляется список ресурсов в текстовом файле с расширением *.RC,
- этот файл, с помощью утилиты
brcc32.exe
, компилируется в файл ресурса, с расширением *. RES, - затем этот файл в среде Delphi компилируется в библиотеку DLL
Разберем детально этот механизм.
Сначала в обычном текстовом редакторе, например в Блокноте
, создадим текстовый файл с расширением *.RC , представляющего собой файл описания ресурсов. Файл содержит следующие строки вида:
<имя ресурса > < тип ресурса > < путь к ресурсу > < имя файла >
например,
image1 RCDATA "picture.jpg"
где строка описания ресурса содержит: имя ресурса - image1, тип ресурса - RCDATA, с расположением ресурса picture.jpg
в этом же каталоге, т.к. путь к ресурсу не указывается.
Тип ресурса RCDATA используется для пользовательских ресурсов, для курсоров указывается тип CURSOR, для иконок - ICON, для изображений формата BMP - BITMAP.
Например:
new BITMAP "new.bmp" finger CURSOR "cursor1.cur" tray ICON "icon15.ico"
В Delphi поддерживаются следующие типы ресурсов
RT_ACCELERATOR - таблица ускорителей
RT_ANICURSOR - анимированный курсор
RT_ANIICON - анимированная икона
RT_DIALOG - диалоговое окно
RT_FONT - шрифт
RT_FONTDIR - набор шрифтов
RT_GROUP_CURSOR - коллекция курсоров
RT_GROUP_ICON - коллекция иконок
RT_HTML - HTML документ
RT_MENU - меню
RT_MESSAGETABLE - таблица сообщений
RT_STRING - таблица строк
RT_VERSION - ресурс версия
Т.е. если вы хотите включить в библиотеку шрифт, то в файле RC указывается тип FONT.
Ресурсы, включенные в файл описания ресурсов *. RC , затем нужно скомпилировать в файл ресурсов с расширением RES при помощи родного компилятора ресурсов Delphi - brcc32.exe
( Borland Resource CommandLine Compiler 32 bit ) , который находится в каталоге Borland\DelphiX\Bin
, где X - версия Delphi . Утилита работает в режиме командной строки. Компиляция файла example.RC
будет выглядеть следующим образом:
с:\Проекты\brcc32.exe example.RC
После компиляции в каталоге с:\Проекты\
появится файл example.RES
.
Затем в среде Delphi создаем библиотеку DLL , куда включаем наш файл ресурсов example.RES
.
Для создания библиотеки DLL в среде Delphi меню File выбираем пункт New и пункт подменю Other..
В появившемся окне выбираем тип проекта DLL Wizard , что представляет собой нужную нам библиотеку DLL создав проект, указываем компилятору включать наш ресурс в директиве {$R}
. В листинге №1 приводится код проекта Project1.
library Project1; uses SysUtils, Classes; {$R example.RES} begin end.
Затем проект компилируем в файл DLL , выбрав в меню Project пункт Build.
Получаем файл DLL с одноименным названием проекта Project1
. Загрузка нашей картинки JPG из библиотеки DLL осуществляется следующим образом. Сначала загружаем DLL в память, создаем поток для конкретного ресурса, извлекаемого из библиотеки, создаем объект изображения
, производим загрузку ресурса в поток
, освобождаем дескрипторы потока и библиотеки.
var h: THandle; imageStream: TResourceStream; Image:TImage; begin h:= LoadLibrary('Project1.Dll'); (1) imageStream:=TResourceStream.Create(h,'image1',rt_RCData);(2) Image.Picture.Graphic:=TJPEGImage.Create; (3) Image.Picture.Graphic.LoadFromStream(ResStream); (4) ResStream.Free; FreeLibrary(h); (5) end;
Учитывая особенности извлекаемых из DLL ресурсов, создается тот или иной объект, т.е. для растрового изображения типа BMP создается объект TBitmap и т.д.
Комментарии