Лабораторная работа №16 по дисциплине

"Высокоуровневые методы информатики и программирования"

ТЕМА: Создание и использование DLL.

----

СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ ПАПОК

1. В Вашей папке создайте папку с именем В_лр16, совпадающим с именем файла

с этим заданием, и затем скопируйте файл с заданием в эту папку.

2. При выполнении задания создавайте в папке В_лр16 для каждого проекта

папку с именем, по смыслу соответствующим предназначению создаваемого

проекта, и сохраняйте все файлы, имеющие отношение к этому проекту,

в этой созданной папке (имена сохраняемых файлов должны отличаться от имен,

присваиваемых по умолчанию, и должны по смыслу соответствовать предназначению

создаваемого проекта).

DLL

---

3. DLL (Dynamic Link Library) – динамически подключаемые библиотеки,

предоставляют универсальный механизм интегрирования в программу

процедур и функций, написанных, в общем случае, не только на языке Delphi,

но и на других языках программирования.

СОЗДАНИЕ DLL

-

ПРОЕКТ DLL (ПРОЕКТ 16-1)

--

4. Для перехода к созданию DLL в окне Turbo Delphi

в правом нижнем углу этого окна во внутреннем окне "Tool Palette"

на вкладке "Delphi Projects"

выберите строку "DLL Wizard"

или выполните команды "File => New => Other..."

(или нажмите на панели инструментов "Standard" кнопку "New items")

и затем в появившемся окне "New Items" в категории "Delphi Projects"

выберите значок "DLL Wizard",

НЕ нашли? Не то? Что вы ищете?

после чего на экране должно появиться окно проекта создаваемой DLL.

5. Выполните действия, связанные с сохранением файлов созданного проекта

с именем, например, Pr16 в папке, например, с именем DLL_Projects

c использованием любой из соответствующих команд из меню команды "File"

в окне Delphi (при этом будет сохранен только один проект без каких-либо

модулей).

6. Добавьте в ПРОЕКТ DLL (или, иначе говоря, добавьте в библиотеку)

функцию с именем, например, vst, для чего непосредственно ниже строк

uses

SysUtils,

Classes;

вставьте следующее описание этой функции

function vst(s, t:string):string; StdCall;

begin

if StrToFloat(t)=0

then

vst:='Скорость: ВРЕМЯ НЕ ДОЛЖНО БЫТЬ РАВНО 0!'

else

vst:='Скорость: '+FloattoStr(StrToFloat(s)/StrToFloat(t));

end;


7. Вставьте строку

exports vst;

между описанием функции vst и строкой

{$R *.res}

8. Выполните компиляцию проекта (командами "Project => Compile Pr16"

или сочетанием клавиш Ctrl+F9), после чего в папке с файлами проекта должен

появиться файл Pr16.dll.

ИСПОЛЬЗОВАНИЕ DLL

------

ПРОЕКТ 16-2

9. В качестве заготовки ПРОЕКТА 16-2 скопируйте в папку В_лр16

папку с файлами проекта ПРОГРАММЫ 2-1

(или пересохраните файлы этого проекта в отдельной папке внутри папки В_лр16,

или создайте этот проект заново в отдельной папке внутри папки В_лр16).

В дальнейшем этот проект будет упоминаться как ПРОЕКТ 16-2.

10. Скопируйте в папку с файлами ПРОЕКТА 16-2 файл Pr16.dll.

11. В модуле ПРОЕКТА 16-2 в конце раздела type (непосредственно выше строки

с var) добавьте заголовок описания функции vst следующего вида:

function vst(s, t:string):string; StdCall; external 'Pr16.dll';

12. В этом же модуле используйте функцию vst вместо условного оператора,

формирующего значение свойства Caption метки, отображающей значение скорости,

например:

Label3.Caption:=vst(Edit1.Text, Edit2.Text);

ПРОЕКТ DLL (дополнение)

--

13. По аналогии с функцией vst добавьте в ПРОЕКТ DLL (или, иначе говоря,

добавьте в библиотеку) процедуру с именем, например, stv, заголовок описания

которой имеет вид

procedure stv(s, t:string;var v:string); StdCall;

и которая должна выполнять те же действия, что и функция vst,

но с присвоением результата параметру v.

14. Строка с ключевым словом exports должна быть изменена на

exports vst, stv;

15. Выполните компиляцию проекта (командами "Project => Compile Pr16"

или сочетанием клавиш Ctrl+F9).

ПРОЕКТ 16-3

16. На основе ПРОЕКТА 16-2 создайте ПРОЕКТ 16-3, в котором:

вместо заголовка описания функции vst должен быть использован

заголовок описания процедуры stv следующего вида

procedure stv(s, t: string; var v:string);StdCall; external 'Pr16.dll';

вместо оператора

Label3.Caption:=vst(Edit1.Text, Edit2.Text);

должен быть использован оператор вызова процедуры stv, в котором невозможно

непосредственное использование в качестве третьего параметра Label3.Caption

(в качестве этого параметра необходимо использование строки, описанной,

например, в процедуре обработки текущего события, и уже затем значение этой

строки может быть присвоено Label3.Caption).

ОТЧЕТ О ВЫПОЛНЕНИИ РАБОТЫ

---

17. Скопируйте в папки с файлами ПРОЕКТА 16-2 и ПРОЕКТА 16-3

измененный файл Pr16.dll.

18. Продемонстрируйте тексты модулей созданных проектов,

а также для ПРОЕКТА 16-2 и ПРОЕКТА 16-3 выполнение соответствующих программ

в среде программирования и независимо от нее.

_____________________________________________________________________________