Лабораторная работа №9. Создание DLL Цель работы: Познакомиться с возможностями Delphi по создание динамических библиотек. Основные понятия: DLL (Dynamic Library Link) – динамически подключаемые библиотеки. Примерно 30-50% кода в простых офисных приложениях схожи между собой или решают одни и те же задачи. Не рационально всякий раз заново писать один и тот же код. Эффективней многократно использовать уже написанный и отлаженный фрагмент программы. Самым первым решением этой задачи стало использование модульного программирования. Вы пишете определенную часть программы, оформляете её в виде модуля, а потом просто используете этот модуль в своих программах. На первый взгляд это самое простое и самое эффективное решение. Всё было прекрасно, пока не появилась многозадачность. Если запустить две программы, имеющие одинаковые фрагменты кода, одновременно, то в оперативную память один и тот же код загрузиться дважды. Для решения этой проблемы было предложено не стыковать модули с основной программой, а сохранять их в отдельный файл, и пусть любая программа загружает их по мере надобности. Так появились библиотеки DLL. При использовании динамических библиотек в исполняемом файле находится только самое основное, а дополнительные возможности подгружаются по мере надобности из DLL-файлов. Например, когда стартует Word, то загружается только модуль текстового редактора. Когда вы выбрали редактор формул или объект WordArt, то Word подгружает из DLL-файла код выбранного объекта и выполняет его. Таким образом, суммарная скорость загрузки уменьшается, причём очень значительно. Порядок выполнения работы 1. Запустите Delphi. 2. Т. к. DLL является отдельным файлом, то и создаётся она в Delphi как отдельный проект. Для создания новой динамической библиотеки в окне Welcome Page выберете New Project …, откроется окно New Items. В открывшемся окне в левой части выберете Delphi Projects, а в правой – Dynamiclink Library. Будет создан пустой проект с одним модулем, который Высокоуровневые методы информатики и программирования будет содержать следующий текст (без комментариев): library Project1; uses SysUtils, Classes; {$R *.res} begin end. 3. Выберите из меню Файл пункт Сохранить как, будет предложено сохранить только один проект и никаких модулей. Сохраните проект в папку D:\Users\...\Lab9\... под именем MyFirstDll. 4. Добавим в библиотеку одну функцию с именем Summ. У этой функции будет два параметра в виде целых чисел, а возвращать она будет их сумму: function Summ (X, Y : Integer): Integer; StdCall; begin Result := X+Y; end; Ключевое слово StdCall говорит о том, что для вызова процедуры нужно использовать стандартный тип вызова. Если его не указать, то параметры будут передаваться способом, заложенным фирмой Borland. Этот способ работает быстрее, но он несовместим со стандартными правилами. 5. После описания функции идёт новое ключевое слово exports. После этого ключевого слова должно идти описание процедур, которые должны быть доступны внешним программам: exports Summ; Если функцию Summ не описать в разделе exports, то её не возможно будет вызвать из внешней программы. 6. Создайте в динамической библиотеке функции для расчёта разности, умножения и деления двух чисел. 7. Откомпилируйте проект, чтобы создать динамическую библиотеку. 8. Проект не может выполняться самостоятельно, поскольку это библиотека. 9. Создайте новый проект простого приложения. Назовите форму MainForm с заголовком Главная размер 400х400. Сохраните проект в папку D:\Users\...\Lab9\.... 2 Высокоуровневые методы информатики и программирования 10. На форме создайте: первую панель высотой 80, сделайте, чтобы она выравнивалась по нижнему краю окна. Измените цвет панели; вторую панель, сделайте, чтобы она занимала всю оставшуюся форму; диалог выбора шрифта. 11. На первой панели создайте кнопки: Шрифт, Разработчик и Закрыть. 12. На второй панели создайте: надпись "Первое число" и рядом однострочный редактор; надпись "Второе число" и рядом однострочный редактор. Сделайте, чтобы в редакторах начальное значение было 0; надпись "0" с размером шрифта 28 и измените для неё цвет. В эту надпись будем записывать результат вычислений; четыре кнопки: Сложение, Вычитание, Умножение и Деление. 13. Запрограммируйте кнопку Закрыть, чтобы при её нажатие окно закрывалось. 14. Запрограммируйте кнопку Шрифт, чтобы при её нажатие можно было изменить шрифт надписи, в которую выводиться результат вычислений. 15. В процедуру обработки для кнопки Сложение введите код: r := Summ (StrToInt(Edit1.Text), StrToInt(Edit2.Text)); Label3.Caption := 'Сумма='+IntToStr (r); 16. Если попытаетесь сейчас откомпилировать проект, то компилятор Delphi скажет, что он не знает функцию Summ. Необходимо показать Delphi, что это за функция и где её искать. Для начала покажем компилятору, что это за функция. Для этого в разделе type после описания объекта TForm1 главной формы нужно написать следующую строку: function Summ (X, Y : Integer) : Integer; StdCall; По этой строке Delphi узнает, что где-то существует такая функция Summ, у неё есть два параметра, и она должна вызываться стандартным вызовом. Теперь нужно сказать компилятору, где же искать эту функцию. Для этого после слова implementation напишите следующий код: function Summ; external 'MyFirstDll.DLL' name 'Summ'; 3 Высокоуровневые методы информатики и программирования Здесь написано, что есть такая функция Summ. После точки с запятой стоит ключевое слово external, которое говорит о том, что функция внешняя, не принадлежит программе. После этого слова указывается имя динамической библиотеки, где нужно искать функцию. Далее идёт ключевое слово name, которое означает, что функцию надо искать по имени. После этого ключевого слова указывается точное имя функции в библиотеке. 17. Аналогично запрограммируйте кнопки Вычитание, Умножение и Деление. 18. Создайте вторую форму размером 400х400, измените её цвет. Назовите форму AboutForm с заголовком Разработчик. На форме: напишите своё Ф.И.О., группу, № лабораторной работы, год. Измените для надписи цвет и размер шрифта; создайте графическую кнопку с предопределённым видом Close. 19. На главной форме запрограммируйте кнопку Разработчик, чтобы при её нажатии открывалось соответствующее окно. 4