Използването и създаване на DLL в Делфи - Delphi източници Често задавани въпроси
Съпругата попита програмист:
- И той се грижи за вас?
Съпруга, след кратък размисъл:
- Влизай, компютърът показва.
Заявленията DLL
Така че, защо имаме нужда от DLL, а когато те се използват. Тук са само някои от областите на тяхното приложение:
Индивидуални библиотеки съдържат полезни допълнителни функции за програмисти. Например, функции за струни, или - сложни библиотеки за конвертиране на изображения. ресурси за съхранение в DLL, които можете да съхранявате не само програмите и функциите, но и на всички видове ресурси - икони, картини, низови масиви, менюта и т.н. Библиотека Подкрепа Като пример, библиотека от известни пакети като: DirectX, ICQAPI (API за ICQ), OpenGL и т.н. Части от програмата, например, DLL могат да се съхраняват прозорец (форма), и т.н. Plugins (Plugins) Това е мястото, където реално възможностите за програмист мисли! Приставките - плъгини, които разширяват възможностите му. Например, в тази статия ще разгледаме теорията на създаването на приставка за своя собствена програма. Споделеният ресурс DLL (Dynamic Link Library) може да се използва от няколко приложения или процеси (например, споделяне - споделен ресурс)
Кратко описание на функциите и техники за работа с DLL
Така че това, което са техниките и функции трябва да се използват за работа с DLL? Нека разгледаме два начина за импортиране на функции от библиотеката:
1 начин. DLL свързване към програмата.
Това е най-прост и лесен за използване метод функции, внесени от DLL. Въпреки това (и това трябва да се отбележи), този метод има много значителен недостатък - ако не бъде намерен в библиотеката, която се използва от програмата, след което програмата просто няма да започне, като грешка и съобщи, че не е намерен ресурс на DLL. Едно търсене в библиотеката ще се извършва: в текущата директория, в директорията на програмата, в директория Windows \ система и т.н. Ами, за начало - цялостната форма на рецепцията:
ИмеНаФункцията (или ProcedureName) име на функцията (или процедура), които ще се използват в програмата си; Par1, PAR2. параметър имена функцията или процедура; Par1Type, Par2Type. видове параметри функция или процедура (например, цяло число); тип ReturnType връщане (за функция само); stdcall директива, която трябва да съвпада точно с най-използваните в DLL; външен директива "DLLNAME.DLL" посочва името на външен DLL, които ще бъдат внесени от функцията или процедурата (в този случай - DLLNAME.DLL); наричам 'имеНаФункцията "(" ProcedureName ") директива, което показва точното име на функцията в най-DLL. Това е допълнителна директива, която ви позволява да използвате функцията за програма с различно име от истината (което е в библиотеката); индекс FunctionIndex (ProcedureIndex) Директива, което показва функцията на сериен номер или DLL процедура. Това също е опция директива.
2 метод. Динамично натоварване DLL
Тя е много по-сложно, но и по-елегантен начин. Той е лишен от липсата на първия метод. Единственото нещо, което е неприятно - размера на код, необходими за прилагането на този метод, трудността е, че функцията на DLL viewable.END_BOLD внесени само когато това DLL е зареден и се съхраняват в паметта. С примера може да се намери по-долу, и все пак - кратко описание на този метод, използван WinAPI функции:
LoadLibrary (LibFileName: PChar) LibFileName товарене каза библиотеки в паметта. След успешното завършване, функцията връща манипулатор (THandle) DLL в паметта. GetProcAddress (Модул: THandle; ProcName: PChar) чете на адреса на функцията за експортиране на библиотеката. При успешно завършване, функцията връща дръжка (TFarProc) функции в натоварената DLL. FreeLibrary (LibModule: THandle) LibModule обезсилва и освобождава свързаното паметта. Трябва да се отбележи, че след като се обадите на тази процедура, библиотечни функции, вече не са налични.
Практика и примери
Е, сега е време да ви дам няколко примера за използване на посочените по-горе методи и техники:
Пример 1. свързване към програма DLL