Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab15_Библиотеки.doc
Скачиваний:
1
Добавлен:
09.11.2019
Размер:
238.08 Кб
Скачать

Динамическое связывание

Динамическое связывание отличается тем, что клиент загружает библиотеку не сразу же после своего размещения в памяти, т.е. после запуска, а по мере надобности. В разделе implementation модуля записано следующее:

type //Процедурный тип функции подгружаемой из библиотеки

TDrawBMP = procedure (Handle : THandle); stdcall;

// Обработка события OnClick на кнопке Button1 с надписью BMP

procedure TForm1.Button1Click(Sender: TObject);

var

hcDll : THandle; //Указатель на библиотеку

DrawBMP : TDrawBMP; //Подгружаемая функция

begin

hcDll := LoadLibrary('Project1.dll'); //Динамическая загрузка DLL

if hcDll <= HINSTANCE_ERROR then begin //Загрузка не удалась

MessageDlg ('Отсутствует библиотека Project1.dll!', mtError, [mbOK], 0);

Exit;

end;

//Библиотека загружена. Получаем адрес точки входа нужной функции

DrawBMP := GetProcAddress(hCDll, 'DrawBMP');

//Проверка на успешность связывания

if not Assigned (DrawBMP) then

begin

MessageDlg ('В библиотеке Project1.dll отсутствует нужная

функция!', mtError, [mbOK], 0);

Exit;

end;

DrawBMP (Canvas1.Handle); //Вызываем функцию

FreeLibrary(hcDll); //Выгружаем библиотеку

end;

Схема такая: загружаем библиотеку только в момент, когда она действительно необходима, получаем адрес требуемой функции и обращаемся к ней. Успешная загрузка библиотеки не является окончательным признаком того, что можно успешно использовать необходимую функцию. В вызываемой библиотеке она может просто отсутствовать.

Задания на разработку:

  1. Создайте и откомпилируйте библиотеку динамической компоновки, содержащую растр, пользуясь описанием в теоретической части.

  2. Для написанной библиотеки создайте клиента, пользуясь статическим связыванием.

  3. Выполните п.2, используя уже динамическое связывание клиента и сервера.

Контрольные вопросы

  1. Что называется сервером и клиентом?

  2. Как создать библиотеку в среде Delphi?

  3. Как создать файл ресурсов и использовать его данные в приложении?

  4. Что называется статическим связыванием клиента и сервера?

  5. Как создать динамическое связывание клиента и сервера?

  6. В чем преимущества использования библиотек?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]