| NIKIOP | Дата: Пятница, 30.03.2012, 12:09 | Сообщение # 1 |
 Знаток
Группа: Свой человек
Сообщений: 63
| Явная(Динамическая) загрузка Сейчас мы рассмотрим Динамическую или как еще говорят Явную загрузку библиотек. Она по объему кода конечно больше чем Неявная(статическая) но зато более гибкая.
Возьмем наш прошлый проект,и переделаем под явную(динамическую) загрузку. Теперь вызов выглядит вот так
Сумма двух чисел: Код Delphi procedure TForm1.btn1Click(Sender: TObject); var a,b,c:integer; //переменные для чисел dHandle: THandle; //Хендл загруженной Dll Symma: function (a,b:integer):Integer;stdcall; //описываем нашу функцию begin //Symma теперь не на какой участок памити не указывает @Symma:=nil; //Пытаемся загрузить Dll dHandle:=LoadLibrary('Math.dll'); //Если загрузили то if dHandle<>0 then begin //Найдем адрес нужной функции и присвоим его переменной Symma @Symma:=GetProcAddress(dHandle,'Symma'); //если мы нашли функции в Dll и получили её адрес то if @Symma<>nil then begin a:=StrToInt(edt1.text); b:=StrToInt(edt2.text); C:=Symma(a,b); lblResult.Caption := 'Результат:' + IntToStr©; end else //если мы не нашли функцию в Dll begin lblResult.Caption := 'Результат:Функция не найдена в Dll'; Exit; end; //выгружаем Dll из памяти FreeLibrary(dHandle); end else begin //если Dll не может быть загружена или не найдена lblResult.Caption := 'Результат:Библеотека не найдена'; Exit; end; end; Факториал числа: Код Delphi procedure TForm1.btn2Click(Sender: TObject); var N:Integer; dHandle: THandle; Fucktorial: function (N:integer):integer;stdcall; begin @Fucktorial:=nil; dHandle:=LoadLibrary('Math.dll'); //Грузим Dll if dHandle<>0 then begin @Fucktorial:=GetProcAddress(dHandle,'Fucktorial'); if @Fucktorial<>nil then begin N:=StrToInt(edt1.text); lblResult.Caption := 'Результат:' + IntToStr(Fucktorial(N)); end else begin lblResult.Caption := 'Результат:Функция не найдена в Dll'; Exit; end; FreeLibrary(dHandle); end else begin lblResult.Caption := 'Результат:Библеотека не найдена'; Exit; end; end; Вы можете испугаться такого количества кода,по сравнению с неявной загрузкой, но когда вы разберетесь все будет казаться простым.
Так как форум не резиновый,я не смог поместить сюда всю информацию.В моей небольшой справке я поместил данную статью и статью по работе с формами в Dll.Найти её можно в конце статьи.
|
| |
| |