ПредишенСледващото

DLL развитие в Borland Delphi

Добавени са извикване на процедури и функции от DLL.

Начин да се обадя на процедури и функции зависи от това как се зареди динамично библиотека, в която тези съчетания са.

Външно дума казва на компилатора, че тази процедура може да се намери в библиотеката от динамични връзки (в този случай - myfirstdll.dll). На следващо място, се обадете на процедурата е както следва:

Когато функции и процедури, които внасят бъдат особено внимателни, когато пишете техните имена и интерфейси! Факт е, че в процеса на съставяне на заявлението не се прави проверки за коректността на имената на обектите, които се изнасят от DLL, няма да бъде извършена, както и ако сте неправилно описан някои функции, а след това по изключение ще се генерира само по време на изпълнение.

Внос от DLL могат да се извършват от името на процедурата (функция), сериен номер, или чрез възлагане на друго име.

В първия случай, можете просто да обяви името на процедурата и библиотеката, от която си внос (както говорихме само по-горе). от поредния внос е необходимо да посочите същата тази стая:

В този случай, името, което даде на процедурата за внос не е задължително да съвпада с това, което е определено за това в най-DLL. Т.е. Запишете тези средства, че се внасят от myfirstdll.dll динамична процедура библиотека връзка, че той е бил изнасян за петнадесети и в същото време като част от вашата кандидатура е дадена тази процедура името SayHello.

Ако по някаква причина не се прилагат метод внос описано по-горе, но все пак искате да промените името на внесен функция (процедура), можете да използвате трета метод:

Тук внесени процедура CoolProcedure е дадено името DoSomethingReallyCool. Обаждане на процедури и функции, внесени от динамични библиотеки връзка е малко по-сложно, отколкото разгледаните по-горе метод. В този случай е необходимо да се декларира указател към функция или процедура, която искате да използвате. Не забравяйте процедура HelloWorld? Нека да видим какво трябва да направите, за да я накараш да се изпълнява в случай на динамично натоварване DLL. На първо място, трябва да се декларира тип, който би трябвало да опише тази процедура:

Сега трябва да се зареди един динамичен звено библиотека, като се използват за получаване на GetProcAddress указател към процедура повикване тази процедура да се извърши, и най-накрая се разтовари DLL от паметта. Следният код показва как това може да се направи:

Както бе споменато по-горе, един от недостатъците на DLL статично натоварване е невъзможността да се продължи прилагането в отсъствието на един или повече библиотеки. В случай на динамично натоварване, имате възможност за софтуер, за да се справят с такива ситуации и да не се позволи на програмата да "падане" на техните собствени. Според върнатите функции LoadLibrary и GetProcAddress стойности могат да се определят, дали успешно премина натоварване на библиотеката, както и дали то е необходимо е намерено процедурата за кандидатстване. Следният код демонстрира това.

В DLL може да се съхранява не само код, но и формата. И създаването и поставянето на форми в динамична библиотека не е твърде много се различава от работата с форми в нормален проект. На първо място, ние ще разгледаме как да напишете библиотека, която съдържа формата, а след това ще говорим за използването на MDI технология в DLL.

развитие DLL, съдържащ форма, ще демонстрира чрез пример.

Така че, първо, създаване на нов проект на динамична библиотека. За да направите това, изберете елемент от менюто Файл | Създай и след това щракнете двукратно върху иконата в DLL. Тогава ще видите нещо подобно следния код:

Запазване на проекта. Наречете го DllForms.dpr.

Сега трябва да се създаде нова форма. Това може да стане по различни начини. Ако например изберете елемент от менюто Файл | нова форма. Добавяне на всеки компонент на формата. Ние наричаме DllForm форма и Запазване на модула под DllFormUnit.pas името.

Да се ​​върнем към основния модул на проекта и поставете функция ShowForm, чиято задача ще бъде да се създаде форма и резултатите от дейността си на екрана. Използвайте кода по-долу.

Имайте предвид, че за проекта е съставен без грешки, трябва да се добави в раздела за употреба на модула за форми.

Ние изнасяме нашата функция с помощта на износа на ключови думи:

Събиране на проекта и да получите dllforms.dll файл. Тези прости стъпки - всичко, което трябва да направите, за да се създаде динамична библиотека, съдържаща формата. Имайте предвид, че функцията ShowForm е обявена за използване stdcall ключовата дума. Той означава, компилаторът да се използва при износ съгласие функции на стандартен разговор (стандартна конвенция вика на разговор). по този начин функции за износ създава възможност за използване на разработения DLL не само в приложения, създадени в Делфи.

Също така имайте предвид, че стойността, върната от ShowForm. съответства на ShowModal. Така че можете да изпратите някаква информация за състоянието на формуляра за кандидатстване призвание.

По-долу е списък на двете, първата от които съдържа пълния код за досието на DLL проект (формуляр модул тук не се дават), а вторият - модул на заявлението за разговори, която се използва само, че сме разработили библиотека.

Моля, имайте предвид, че когато функция износ също е бил използван stdcall ключова дума.

Ние трябва да обърнат специално внимание на работата с формата на дете в DLL. Ако, например, в заявлението за разговори основна форма е на стойност FormStyle, равен MDIForm, когато се опитате да се обадите от DLL MDIChild-форма, ще видите съобщение за грешка, което ще се говори, че не е активен MDI-форма.

В този момент, когато се опитвате да се покаже на детето си прозорец, за VCL валидира свойства основна форма FormStyle приложението. Въпреки това, в този случай, всичко изглежда наред. И така, какво е сделката? Проблемът е, че при извършване на такава проверка, обект на кандидатстване се вижда, не е принадлежност към заявлението за разговори и действителната динамична библиотека. Е, разбира се, тъй като DLL не е основна форма, проверката е неуспешна. За да се избегне такава ситуация, е необходимо да се определи обект Application динамичен звено библиотека Application обект на заявлението за призванието на. Естествено, това ще работи само ако обаждащият - VCL-приложение. Освен това, преди разтоварване на библиотеката на паметта е необходимо да се върне стойността на обект библиотеката на приложенията към първоначалното си състояние. Това позволява на мениджъра на паметта, за да изчистите паметта заета от библиотеката. Следователно, трябва да се съхранява указател към "родния" към библиотеката на обекта Application в глобална променлива, която може да се използва при възстановяването на неговата стойност.

Така че, ние се върнем малко, и са стъпките, които трябва да се работи с поставени в DLL MDIChild-форми.
  1. В динамична библиотека, създаване на глобална променлива от тип TApplication.
  2. Запазване на показалеца DLL обекта Application в глобалната променлива.
  3. обект Application динамична библиотека ние свързваме указател към прилагането на приложението за разговори.
  4. Създаване MDIChild-образна форма и да работите с него.
  5. Ние се върнете към първоначалната си стойност състояние обект Application динамичен звено библиотека DLL и разтоварване от паметта.
Първата стъпка е проста. Просто поставете следния код в горната част на модула за DLL:

След това създайте процедура, която ще се промени стойността на обекта за кандидатстване и да се създаде форма дете. Процедурата може да изглежда по следния начин:

Всичко, което сега трябва да направите - е да осигури връщане на стойността на обекта за кандидатстване в първоначалното му състояние. Това се извършва чрез процедура MyDllProc:

Използването на динамично на пръв поглед. DLL е чудесен начин да се оптимизира работата на приложенията, както и работата на самите програмисти. Използвайте DLL и може би животът ви ще стане по-лесно!

За повече информация, моля свържете се с компанията Interface Ltd.

Подкрепете проекта - споделете линка, благодаря!