Как уже говорилось выше, одним из недостатков статической загрузки DLL является невозможность продолжения работы приложения при отсутствии одной или нескольких библиотек. В случае с динамической загрузкой у вас появляется возможность программно обрабатывать такие ситуации и не допускать, чтобы программа "вываливалась" самостоятельно. По возвращаемому функциями LoadLibrary и GetProcAddress значениям можно определить, успешно ли прошла загрузка библиотеки и найдена ли в ней необходимая приложению процедура. Приведенный ниже код демонстрирует это.
Code: |
procedure TForm1.DynamicLoadBtnClick(Sender: TObject); type THelloWorld = procedure(AForm : TForm); var DLLInstance : THandle; HelloWorld : THelloWorld; begin DLLInstance := LoadLibrary('myfirstdll.dll'); if DLLInstance = 0 then begin MessageDlg('Невозможно загрузить DLL', mtError, [mbOK], 0); Exit; end; @HelloWorld := GetProcAddress(DLLInstance, 'HelloWorld'); if @HelloWorld <> nil then HelloWorld (Self) else MessageDlg('Не найдена искомая процедура!.', mtError, [mbOK], 0); FreeLibrary(DLLInstance); end; |
В DLL можно хранить не только код, но и формы. Причем создание и помещение форм в динамическую библиотеку не слишком сильно отличается от работы с формами в обычном проекте. Сначала мы рассмотрим, каким образом можно написать библиотеку, содержащую формы, а затем мы поговорим об использовании технологии MDI в DLL.
Разработку DLL, содержащую форму, я продемонстрирую на примере.
Итак, во-первых, создадим новый проект динамической библиотеки. Для этого выберем пункт меню File|New, а затем дважды щелкнем на иконку DLL. После этого вы увидите примерно следующий код:
Code: |
library Project2; {здесь были комментарии} uses SysUtils, Classes; {$R *.RES} begin end. |
Сохраните полученный проект. Назовем его DllForms.dpr.
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!