Карта сайтаСсылкиКонтакты

Хостинг


DLL c JPG и другими ресурсами

PDF Печать
Статьи

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

  1. составляется список ресурсов в текстовом файле с расширением *.RC,
  2. этот файл, с помощью утилиты " brcc32.exe ", компилируется в файл ресурса, с расширением *. RES,
  3. затем этот файл в среде Delphi компилируется в библиотеку DLL.

Разберем детально этот механизм.

1. Сначала в обычном текстовом редакторе, например в "Блокноте", создадим текстовый файл с расширением " *.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.

2 . Ресурсы, включенные в файл описания ресурсов *.RC , затем нужно скомпилировать в файл ресурсов с расширением RES при помощи родного компилятора ресурсов Delphi - " brcc32.exe " ( Borland Resource CommandLine Compiler 32 bit ) , который находится в каталоге Borland\DelphiX\Bin , где X - версия Delphi . Утилита работает в режиме командной строки.

Компиляция файла "example.RC " будет выглядеть следующим образом: с:\Проекты\brcc32.exe example.RC После компиляции в каталоге "с:\Проекты\" появится файл example.RES

3. Затем в среде Delphi создаем библиотеку DLL , куда включаем наш файл ресурсов example.RES .

Для создания библиотеки DLL в среде Delphi меню " File " выбираем пункт " New " и пункт подменю " Other.. "

В появившемся окне выбираем тип проекта DLL Wizard, что представляет собой нужную нам библиотеку DLL

Мастер проекта

приводится код проекта " Project1 ".


library Project1;

uses
  SysUtils, Classes, JPEG;

{$R example.RES}

begin
end.

Затем проект компилируем в файл DLL , выбрав в меню " Project " пункт " Build ". Получаем файл DLL с одноименным названием проекта "Project1". Загрузка нашей картинки JPG из библиотеки DLL осуществляется следующим образом. Сначала загружаем DLL в память (1), создаем поток для конкретного ресурса (2), извлекаемого из библиотеки, создаем объект изображения (3), производим загрузку ресурса в поток (4), освобождаем дескрипторы потока и библиотеки (5)


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 и т.д.

Владимир Богдановский


 

Комментарии   

 
0 #1 Michael 15.11.2015 18:21
Не работает. ResStream не объявлена в разделе переменных. При попытке реализовать вместо нее imageStream выдает ошибку.
Цитировать
 

Добавить комментарий


Защитный код
Обновить