Лабораторная работа №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 выполнение соответствующих программ в среде программирования и независимо от нее. _____________________________________________________________________________