Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Implementation end




Type

Interface

Complex=record


Re,im:Real;

end;

Library MyDLL; {Программа DLL.)

uses SysUtils, Classes, DeclComplex; function AddC(X,Y:complex):complex; begin

with result do begin Re:=x.Re+Y.Re;

end; end;

Exports AddC; begin end.

Импортирование подпрограмм другими программными единицами воз­можно в статическом (неявном) или динамическом (явном) режимах. Если используется статическое импортирование подпрограммы, то задается заго­ловок такой подпрограммы с командой External. Если DLL является Win­dows-библиотекой или, например, написанной на C++, то необходимо ука­зать соглашения о вызовах. Например, Procedure Procl (var x: Vari­ant); Cdecl; External 'CDLL.dll';. В этом примере из библиотеки cdll. dll, написанной на C++, указано соглашение этого языка о передаче данных Cdecl.

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

При динамическом импортировании библиотека грузится непосредст­венно внутри той программной единицы, которой она необходима. После того как надобность в библиотеке исчезнет, ее нужно выгрузить. Для загруз­ки используется стандартная функция LoadLibrary (API-функция) с единст­венным параметром типа PChar, задающим имя библиотеки, например var Handle:HModule;... Handle: =LoadLibrary ('MyDll.dll');. Для вы­грузки DLL используется подпрограмма FreeLibrary (Handle);.

Для работы с библиотекой необходимо получить адрес требуемой функ­ции (или процедуры). При этом используется API-функция GetProcAd-ress(Handle: HModule, lpProcName: LPCSTR): FARPROC, которая ищет подпрограмму, указанную именем lpProcName. В качестве результата возвращается указатель на функцию (или процедуру) или nil. Полученный указатель должен быть далее приведен к нужному типу. Например, возмо­жен такой вариант:

Onit uCallDll; Interface


type TAddC =Function(X,Y:Complex):Complex; TForm1=class(TForm)

…………………

Private {Добавим в описание формы}

DLLHandle: HModule;
ExternalMyFunctionPointer:TFarProc;
ExternalMyFunction:TAddC;

……………………………………………

Implementation

……………………………………

ProcedureTForm1.Button1Click(Sender:TObject);

………………………………

DLLHandle:=LoadLibrary('MyDll.dll'); ExternalMyFunctionPointer:= GetProcAdress(DLLHandle,

PChar('AddC'));

ExternalMyFunction:=TAddC(ExternalMyFunctionPointer)

В данном примере вполне работоспособном опущены некоторые опера­торы, с помощью которых проверяется, удачно или нет выполнено то или иное действие по получению ресурсов.

 

ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ

Ниже будут рассмотрены некоторые стандартные для Windows техноло­гии программирования. Вообще технология представляет собой набор мето­дов и способов, позволяющих получить требуемые результаты. Поэтому знание различных подходов в программировании позволит разрабатывать профессионально законченные и надежно работающие приложения. Выше были рассмотрены технологии, например, построения циклических вычис­лительных процессов, построения динамически компонуемых библиотек и т.д. Далее рассмотрим более сложные технологии.




Поделиться с друзьями:


Дата добавления: 2014-12-29; Просмотров: 315; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.