КАТЕГОРИИ: Архитектура-(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 является Windows-библиотекой или, например, написанной на C++, то необходимо указать соглашения о вызовах. Например, Procedure Procl (var x: Variant); 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; …………………………………………… Implementation …………………………………… ProcedureTForm1.Button1Click(Sender:TObject); ……………………………… DLLHandle:=LoadLibrary('MyDll.dll'); ExternalMyFunctionPointer:= GetProcAdress(DLLHandle, PChar('AddC')); ExternalMyFunction:=TAddC(ExternalMyFunctionPointer) В данном примере вполне работоспособном опущены некоторые операторы, с помощью которых проверяется, удачно или нет выполнено то или иное действие по получению ресурсов.
ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ Ниже будут рассмотрены некоторые стандартные для Windows технологии программирования. Вообще технология представляет собой набор методов и способов, позволяющих получить требуемые результаты. Поэтому знание различных подходов в программировании позволит разрабатывать профессионально законченные и надежно работающие приложения. Выше были рассмотрены технологии, например, построения циклических вычислительных процессов, построения динамически компонуемых библиотек и т.д. Далее рассмотрим более сложные технологии.
Дата добавления: 2014-12-29; Просмотров: 332; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |