Zaawansowane programowanie w (pakiecie) Delphi



Podobne dokumenty
PODSTAWY PROGRAMOWANIA

PODSTAWY PROGRAMOWANIA

gdy wielomian p(x) jest podzielny bez reszty przez trójmian kwadratowy x rx q. W takim przypadku (5.10)

Język programowania PASCAL

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

III. INTERPOLACJA Ogólne zadanie interpolacji. Niech oznacza funkcjê zmiennej x zale n¹ od n + 1 parametrów tj.

Rys Mo liwe postacie funkcji w metodzie regula falsi

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

PODSTAWY PROGRAMOWANIA

Stronicowanie na ¹danie

Zaawansowane programowanie w (pakiecie) Delphi

ZA CZNIK C: FUNKCJE KLAWISZY I SPOSOBY WPROWADZANIA PARAMETRÓW

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

PL/SQL. Zaawansowane tematy PL/SQL

Zintegrowane Systemy Zarządzania Biblioteką SOWA1 i SOWA2 SKONTRUM

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

1. Podstawy budowania wyra e regularnych (Regex)

Delphi Laboratorium 3

BEZPRZEWODOWA MYSZ OPTYCZNA FLAT PRO INSTRUKCJA OBS UGI

INSTRUKCJA U YTKOWNIKA DO KASY SHARP ER-A457P wersja oprogramowania: 27801RAR1C PROGRAMOWANIE FORMATU RAPORTÓW, KROK (PGM2)

Innym wnioskiem z twierdzenia 3.10 jest

API transakcyjne BitMarket.pl

Regulamin Krêgów Harcerstwa Starszego ZHR

WZÓR SKARGI EUROPEJSKI TRYBUNAŁ PRAW CZŁOWIEKA. Rada Europy. Strasburg, Francja SKARGA. na podstawie Artykułu 34 Europejskiej Konwencji Praw Człowieka

O autorze... 9 Wprowadzenie... 11

Podstawy programowania skrót z wykładów:

Komunikacja w sieci Industrial Ethernet z wykorzystaniem Protokołu S7 oraz funkcji PUT/GET

STRUKTURA MENU STRUKTURA MENU

(wymiar macierzy trójk¹tnej jest równy liczbie elementów na g³ównej przek¹tnej). Z twierdzen 1 > 0. Zatem dla zale noœci

EGZAMIN MATURALNY Z INFORMATYKI

PRAWA ZACHOWANIA. Podstawowe terminy. Cia a tworz ce uk ad mechaniczny oddzia ywuj mi dzy sob i z cia ami nie nale cymi do uk adu za pomoc

IV. UK ADY RÓWNAÑ LINIOWYCH

PERSON Kraków

Blokady. Model systemu. Charakterystyka blokady

ER RATA do ksi¹ ki "Symfonia C++ Stan dard". wydanie 3. (Zawieraj¹ca tak e czysto kosmetyczne poprawki) Sporz¹dzona 4 paÿdziernika 2009.

Zaawansowane programowanie w (pakiecie) Delphi

Odpowiedzi na pytania zadane do zapytania ofertowego nr EFS/2012/05/01

Instrukcja obs³ugi ciep³omierza AT 539 SUPERCAL

Ada-95. Dariusz Wawrzyniak

TÜV Rheinland Polska. Nowy Znak. Odpowiadamy na Pañstwa pytania.

Warszawa, r.

Projektowanie bazy danych

Podstawy Programowania semestr drugi. Wykład czternasty

DEKODER 4-WYJŒCIOWY. Nr Ref. 1038/34

Instalacja. Zawartość. Wyszukiwarka. Instalacja Konfiguracja Uruchomienie i praca z raportem Metody wyszukiwania...

PFR Wstępnie wypełnione zeznanie podatkowe. PIT-37 i PIT-38 za rok 2015

Budowa systemów komputerowych

Temat: Funkcje. Własności ogólne. A n n a R a j f u r a, M a t e m a t y k a s e m e s t r 1, W S Z i M w S o c h a c z e w i e 1

Wytyczne Województwa Wielkopolskiego

BUS - Kabel. Do po³¹czenia interfejsów magistrali TAC - BUS BK 1 BK 10 BK 40-1

Wartości domyślne, szablony funkcji i klas

revati.pl Drukarnia internetowa Szybki kontakt z klientem Obs³uga zapytañ ofertowych rozwi¹zania dla poligrafii Na 100% procent wiêcej klientów

BEZPRZEWODOWA ZESTAW OPTYCZNY PHANTOM INSTRUKCJA OBS UGI

G PROGRAMMING. Part #4

Elementy cyfrowe i układy logiczne

Procedury i funkcje - powtórzenie i uzupełnienia. Przykład funkcji potęgowanie przy wykładniku naturalnym

Kancelaris - Zmiany w wersji 2.50

Zarz¹dzanie pamiêci¹

PROCEDURA REKRUTACJI DZIECI DO PRZEDSZKOLA NR 2 PROWADZONEGO PRZEZ URZĄD GMINY WE WŁOSZAKOWICACH NA ROK SZKOLNY 2014/2015

HAŚKO I SOLIŃSKA SPÓŁKA PARTNERSKA ADWOKATÓW ul. Nowa 2a lok. 15, Wrocław tel. (71) fax (71) kancelaria@mhbs.

Rozliczenia z NFZ. Ogólne założenia. Spis treści

Wiedza niepewna i wnioskowanie (c.d.)

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

PREZENTACJA INFORMACJI FINANSOWEJ w analizach i modelowaniu finansowym. - dane z rynków finansowych DANE RÓD OWE

Instrukcja programu PControl Powiadowmienia.

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Uniwersytet Rzeszowski

Podstawowe pojęcia: Populacja. Populacja skończona zawiera skończoną liczbę jednostek statystycznych

Kabel do transmisji danych CA-42 krótka instrukcja instalacji

Warunki Oferty PrOmOcyjnej usługi z ulgą

ABONENCKA CENTRALA TELEFONICZNA SIGMA. Instalacja sterownika USB

A X E S S INSTRUKCJA UŻYTKOWNIKA

7. REZONANS W OBWODACH ELEKTRYCZNYCH

Po³¹czenie iphone'a/ipad a do Smart Multishare USB

1. Rozwiązać układ równań { x 2 = 2y 1

ZASADY WYPEŁNIANIA ANKIETY 2. ZATRUDNIENIE NA CZĘŚĆ ETATU LUB PRZEZ CZĘŚĆ OKRESU OCENY

Instrukcja U ytkownika Systemu Antyplagiatowego Plagiat.pl

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

Warszawa, dnia 1 października 2013 r. Poz. 783 UCHWAŁA ZARZĄDU NARODOWEGO BANKU POLSKIEGO. z dnia 24 września 2013 r.

REGULAMIN TURNIEJU SPORTOWEJ GRY KARCIANEJ KANASTA W RAMACH I OGÓLNOPOLSKIEGO FESTIWALU GIER UMYSŁOWYCH 55+ GORZÓW WLKP R.

Pętle w PERLU postać ogólna

Zasady rekrutacji dzieci do I klasy Szkoły Podstawowej im. hm. Janka Bytnara Rudego w Lubieniu Kujawskim na rok szkolny 2014/2015*

Wykład III PASCAL - iteracja cz, 2, - liczby losowe, - tablice

Polska-Bytom: Różne usługi branżowe i podobne 2016/S Ogłoszenie o udzieleniu zamówienia. Usługi

Automatyka. Etymologicznie automatyka pochodzi od grec.

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C

InsERT GT Własne COM 1.0

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Dane osoby uprawnionej do emerytury (która dokonuje wskazania po raz pierwszy/ zmienia poprzedni dyspozycj ) dd / mm / rrrr

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Metody wyceny zasobów, źródła informacji o kosztach jednostkowych

Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu.

STANDARYZACJA ZNAKU FIRMOWEGO. Latam z Katowic! Miêdzynarodowy Port Lotniczy KATOWICE

PKN ORLEN S.A. Elektroniczny słownik lub tłumacz multijęzyczny. Zapytanie ofertowe. Dotyczy: Wersja: 1.0 Data: r.

STATUT SOŁECTWA Grom Gmina Pasym woj. warmińsko - mazurskie

SPIS TREŒCI. Pismo w sprawie korzystania z pomocy finansowej ze œrodków funduszu restrukturyzacji banków spó³dzielczych.

Transkrypt:

DEL420 Zaawansowane programowanie w (pakiecie) Delphi Andrzej Marciniak Prezentacja multimedialna przygotowana za pomoc¹ systemu Corel Presentations 11 i X3 Copyright 2004-2010 by Andrzej Marciniak DEL-3(1 z 65)

Na poprzednim wyk³adzie... obs³uga warunków i stanów wyj¹tkowych instrukcja wywo³ywania stanów wyj¹tkowych (raise) instrukcja try... except instrukcja try... finally predefiniowane warunki i stany wyj¹tkowe okienka z komunikatami DEL-3(2 z 65)

Na tym wyk³adzie... programowanie bibliotek ³¹czonych dynamicznie dostêp do funkcji i procedur modu³y importowe importowanie statyczne i dynamiczne tworzenie bibliotek DLL b³êdy wykonania w bibliotekach DLL funkcje i procedury rodzaje parametrów konwencje wywo³ania przeci¹ anie DEL-3(3 z 65)

Biblioteki ³¹czone dynamicznie (w skrócie: biblioteki DLL od ang. dynamic-link libraries) s³u ¹ do wspólnego u ywania kodów programowych i zasobów (danych definiuj¹cych wizualne czêœci programów uruchamianych w œrodowisku Windows) przez ró ne programy i inne biblioteki DLL. Jêzyk Delphi Pascal umo liwia zarówno korzystanie z istniej¹cych bibliotek DLL, jak i zaprogramowanie przez u ytkownika w³asnych bibliotek tego typu. DEL-3(4 z 65)

Biblioteka ³¹czona dynamicznie jest wykonywaln¹ jednostk¹ programow¹ zawieraj¹c¹ kod programowy lub zasoby. W postaci skompilowanej jest pamiêtana w zbiorze dyskowym o rozszerzeniu nazwy DLL. Podobieñstwo bibliotek DLL do modu³ów: obie struktury programowe zawieraj¹ procedury i funkcje wykorzystywane przez programy, modu³y i inne biblioteki DLL DEL-3(5 z 65)

Ró nice pomiêdzy bibliotekami DLL i modu³ami: sposób do³¹czania do jednostek programowych (programów, modu³ów i innych bibliotek DLL), modu³y umo liwiaj¹ nie tylko wykorzystanie w programie procedur i funkcji, ale tak e litera³ów, typów i zmiennych w nich zdefiniowanych (w czêœci opisowej), a z bibliotek DLL mog¹ byæ eksportowane tylko procedury i funkcje. DEL-3(6 z 65)

Dostêp do procedur i funkcji W celu u ycia w programie (module, bie ¹cej bibliotece ³¹czonej dynamicznie) procedury lub funkcji zdefiniowanej w danej bibliotece DLL nale y w czêœci opisowej programu (modu³u, bie ¹cej biblioteki DLL) zadeklarowaæ dan¹ procedurê lub funkcjê z dyrektyw¹ external. Dyrektywa external okreœla odpowiedni¹ bibliotekê DLL i wi¹ e deklaracjê z procedur¹ lub funkcj¹, która jest w niej zdefiniowana. DEL-3(7 z 65)

Dostêp do procedur i funkcji Przyk³ad function okienko_komunikatu (identyfikator : Integer; komunikat, nag³ówek : PChar; znaczniki : Integer) : Integer; stdcall; external user32.dll name MessageBoxA ; Dyrektywa jêzyka stdcall okreœla konwencjê wywo³ania funkcji. DEL-3(8 z 65)

Dostêp do procedur i funkcji Dla bibliotek DLL napisanych w jêzyku Delphi Pascal, które bêd¹ wywo³ywane tylko w jednostkach programowych (programach, modu³ach i innych bibliotekach DLL) napisanych tak e w tym jêzyku, okreœlanie konwencji wywo³ania nie jest konieczne (domyœln¹ konwencjê okreœla dyrektywa register). W przypadku korzystania z bibliotek DLL napisanych w innych jêzykach lub w bibliotekach pisanych w jêzyku Delphi Pascal, ale przeznaczonych do wykorzystania w innych jêzykach programowania, nale y w deklaracjach funkcji i procedur podawaæ dyrektywê stdcall. DEL-3(9 z 65)

Dostêp do procedur i funkcji Program (modu³, bie ¹ca biblioteka DLL) napisany w jêzyku Delphi Pascal mo e pobraæ procedurê lub funkcjê z danej biblioteki DLL przez : nazwê, now¹ (inn¹) nazwê, liczbê porz¹dkow¹. W ka dym z tych sposobów postaæ dyrektywy external jest inna. DEL-3(10 z 65)

Dostêp do procedur i funkcji Import poprzez nazwê oznacza, e w tablicy nazw odpowiedniej biblioteki DLL bêdzie poszukiwany identyfikator danej procedury lub funkcji (po przekszta³ceniu wszystkich ma³ych liter na wielkie). Dyrektywa external ma w tym przypadku postaæ external nazwa-biblioteki; gdzie nazwa biblioteki w ogólnoœci oznacza sta³e wyra enie ³añcuchowe. Uwaga: Ró nice pomiêdzy Windows 98, Me i XP a NT i 2000. DEL-3(11 z 65)

Dostêp do procedur i funkcji Przyk³ady 1) procedure proc_a; external PROCDLL.DLL ; Jeœli wczeœniej zdefiniujemy sta³¹ ³añcuchow¹ biblioteka_1 nastêpuj¹co: const biblioteka_1 = PROCDLL.DLL ; to podan¹ deklaracjê procedury proc_a mo na zast¹piæ deklaracj¹ procedure proc_a; external biblioteka_1; 2) function NWP (const a, b : Longint) : Longint; external NUMLIB.DLL ; DEL-3(12 z 65)

Dostêp do procedur i funkcji Jeœli nazwa procedury lub funkcji w programie (module, bie ¹cej bibliotece DLL) ma byæ inna ni nazwa, za pomoc¹ której eksportuje siê j¹ z danej biblioteki, to nale y zastosowaæ importowanie przez now¹ (inn¹) nazwê. Dyrektywa external ma w tym przypadku postaæ external nazwa-biblioteki name nazwa-importowa; DEL-3(13 z 65)

Dostêp do procedur i funkcji Przyk³ad function podzielnik (const a, b : Longint) : Longint; external NUMLIB.DLL name NWP ; DEL-3(14 z 65)

Dostêp do procedur i funkcji Import przez liczbê porz¹dkow¹ jest najbardziej efektywny, gdy w tym przypadku odpowiedni identyfikator nie jest poszukiwany w tablicy nazw biblioteki. Liczba porz¹dkowa procedury lub funkcji jest w bibliotece DLL ustalona za pomoc¹ klauzuli exports (bêdzie dalej). Dyrektywa external odwo³uj¹ca siê do tej liczby ma postaæ external nazwa-biblioteki index liczba-porz¹dkowa; DEL-3(15 z 65)

Dostêp do procedur i funkcji Przyk³ad procedure proc_b; external PROCDLL.DLL index 15; Jeœli wczeœniej okreœlono nastêpuj¹ce sta³e: const biblioteka_1 = PROCDLL.DLL ; liczba_porz = 15; to podan¹ deklaracjê mo na zast¹piæ deklaracj¹ procedure proc_b; external biblioteka_1 index liczba_porz; DEL-3(16 z 65)

Modu³y importowe Procedury i funkcje mog¹ byæ pobierane z bibliotek DLL do programów (modu³ów, innych bibliotek DLL) w sposób bezpoœredni (opisany bli ej) lub w sposób poœredni z modu³ów, które zawieraj¹ odpowiednie deklaracje. Modu³y takie nazywamy modu³ami importowymi. Zalety stosowania modu³ów importowych: a) mo liwoœæ umieszczania w ich czêœciach opisowych definicji i deklaracji sta³ych, typów i zmiennych, które u³atwiaj¹ dostêp do procedur i funkcji (bezpoœrednie odwo³anie siê w programie do sta³ych, typów i zmiennych zdefiniowanych w bibliotece DLL nie jest mo liwe), b) po modyfikacji jakiejœ biblioteki wystarczy zmieniæ tylko odpowiedni modu³, a nie wszystkie programy (inne modu³y, biblioteki DLL), które korzystaj¹ z danej biblioteki. DEL-3(17 z 65)

Przyk³ad unit cplcproc; interface type complex = record re, im : Extended end; Biblioteki DLL Modu³y importowe function addcplx (const a, b : complex) : complex; function subcplx (const a, b : complex) : complex; function multcplx ( const a, b : complex) : complex; function divcplx ( const a, b : complex) : complex; implementation function addcplx; external CPLXPROC.DLL index 1; function subcplx; external CPLXPROC.DLL index 2; function multcplx; external CPLXPROC.DLL index 3; function divcplx; external CPLXPROC.DLL index 4; end. DEL-3(18 z 65)

Importowanie statyczne i dynamiczne Zastosowanie w programie (module, innej bibliotece DLL) dyrektywy jêzyka external z nazw¹ danej biblioteki powoduje ustalenie biblioteki, z której bêd¹ pobierane procedury lub funkcje w sposób jawny. Pobieranie takie, zwane importowaniem statycznym, dotyczy zawsze tej samej procedury lub funkcji w tej samej bibliotece. Jêzyk Delphi Pascal umo liwia tak e ustalenie biblioteki i pobieranej z niej procedury lub funkcji dopiero podczas wykonywania programu. Ten sposób okreœlania biblioteki procedury lub funkcji nazywa siê importowaniem dynamicznym. i DEL-3(19 z 65)

Importowanie statyczne i dynamiczne Do przeprowadzenia importowania dynamicznego s³u ¹ trzy funkcje standardowe: LoadLibrary, GetProcAddress, FreeLibrary, które s¹ zdefiniowane w module Windows. DEL-3(20 z 65)

Importowanie statyczne i dynamiczne Funkcja LoadLibrary s³u y do wczytania biblioteki DLL do pamiêci. Jej wywo³anie ma postaæ LoadLibrary (nazwa-zbioru-bibliotecznego) Argument (typu PAnsiChar) wskazuje na ³añcuch, który zawiera nazwê zbioru dyskowego z wczytywan¹ bibliotek¹. Gdy wczytanie biblioteki zakoñczy siê pomyœlnie, to wartoœci¹ funkcji jest jej identyfikator w pamiêci. Wartoœæ funkcji równa 0 oznacza b³¹d podczas wczytywania biblioteki. Ka de wywo³anie funkcji LoadLibrary dla danej biblioteki zwiêksza wewnêtrzny licznik odwo³añ do niej o jeden. DEL-3(21 z 65)

Importowanie statyczne i dynamiczne Do zwolnienia pamiêci zajêtej przez bibliotekê s³u y funkcja FreeLibrary, której wywo³anie ma postaæ FreeLibrary (identyfikator) Identyfikator oznacza argument bêd¹cy wartoœci¹ funkcji LoadLibrary, która wczyta³a dan¹ bibliotekê do pamiêci. Wartoœæ funkcji jest o tyle nieistotna, e zwykle funkcjê FreeLibrary wywo³uje siê jak procedurê. Wywo³anie funkcji FreeLibrary powoduje zmniejszenie wewnêtrznego licznika odwo³añ do danej biblioteki o jeden i jeœli licznik ten osi¹gnie wartoœæ zero zwolnienie pamiêci zajêtej przez bibliotekê. DEL-3(22 z 65)

Importowanie statyczne i dynamiczne Dostêp (dynamiczny) do funkcji i procedur biblioteki DLL, która zosta³a wczytana do pamiêci, jest mo liwy poprzez adres, do którego otrzymania s³u y funkcja GetProcAddress. Jej wywo³anie jest nastêpuj¹ce: GetProcAddress (identyfikator, nazwa-funkcji-lub-procedury) gdzie identyfikator jest wartoœci¹ funkcji LoadLibrary, a drugi argument (typu identycznego z PAnsiChar) wskazuje na ³añcuch, który zawiera nazwê ¹danej funkcji lub procedury lub te podaje jej liczbê porz¹dkow¹. W drugim przypadku bardziej znacz¹ce s³owo musi byæ zerem, a s³owo mniej znacz¹ce podawaæ odpowiedni¹ liczbê. Wartoœci¹ funkcji GetProcAddress jest adres ¹danej funkcji lub procedury, lub wartoœæ nil, gdy funkcji lub procedury nie odnaleziono. DEL-3(23 z 65)

Importowanie statyczne i dynamiczne Przyk³ad program programdll; {$APPTYPE CONSOLE} uses SysUtils, Windows;... type complex = record re, im : Extended end; var ident_1, ident_2 : HMODULE;... addcplx min deklaracja zmiennych do przechowywania identyfikatorów bibliotek : function (const a, b : complex) : complex; : function (const a, b : Extended) : Extended; deklaracja zmiennych proceduralnych reprezentuj¹cych w programie funkcje z biblioteki DEL-3(24 z 65)

Importowanie statyczne i dynamiczne Przyk³ad (cd.) begin ident_1:=loadlibrary( C:\DELPHI\BIBL\CPLXPROC.DLL ); ident_2:=loadlibrary( A:\MIN_MAX.DLL ); wczytanie bibliotek do pamiêci if ident_1<>0 then @addcplx:= GetProcAddress(ident_1, PAnsiChar(1)); import dynamiczny przez liczbê porz¹dkow¹ DEL-3(25 z 65)

Importowanie statyczne i dynamiczne Przyk³ad (cd.) if ident_2<>0 then @min:=getprocaddress(ident_2, MIN ); if @addcplx<>nil then begin... end; if @min<>nil then begin... end; import dynamiczny przez nazwê mo liwoœæ wywo³ania funkcji addcplx mo liwoœæ wywo³ania funkcji min DEL-3(26 z 65)

Importowanie statyczne i dynamiczne Przyk³ad (cd.) if (@addcplx<>nil) and (@min<>nil) then begin... end; mo liwoœæ wywo³ania obu funkcji FreeLibrary (ident_1); FreeLibrary (ident_2);... end. usuniêcie bibliotek z pamiêci DEL-3(27 z 65)

Tworzenie bibliotek DLL Struktura biblioteki DLL jest nastêpuj¹ca: library nazwa-biblioteki; deklaracje-modu³ów czêœæ-opisowa begin ci¹g-instrukcji end. Sposób przekazywnia procedur i funkcji eksportowanych z biblioteki do programów lub modu³ów jest okreœlony w czêœci opisowej dodatkowymi klauzulami exports. Czêœæ wykonawcza bloku spe³nia rolê czêœci inicjuj¹cej biblioteki DLL. DEL-3(28 z 65)

Tworzenie bibliotek DLL W czêœci opisowej biblioteki wystêpuj¹ definicje funkcji i procedur eksportowalnych oraz (po nich) klauzule exports: exports lista-eksportowa; Elementy listy eksportowej oddziela siê przecinkami, a ka dy z nich mo e mieæ jedn¹ z nastêpuj¹cych postaci: identyfikator identyfikator index liczba-porz¹dkowa identyfikator index liczba-porz¹dkowa name nazwa identyfikator name nazwa Dodatkowo na koñcu ka dego elementu listy eksportowej mo e wyst¹piæ s³owo (dyrektywa jêzyka) resident. DEL-3(29 z 65)

Tworzenie bibliotek DLL Identyfikator wystêpuj¹cy w ka dym elemencie listy klauzuli exports jest nazw¹ odpowiedniej funkcji lub procedury eksportowej. Jeœli w elemencie listy klauzuli exports wystêpuje dyrektywa jêzyka index, oznacza to, e eksport funkcji lub procedury mo e odbyæ siê poprzez podan¹ liczbê porz¹dkow¹. Liczba ta jest sta³¹ ca³kowit¹ i mo e mieæ wartoœæ od 1 do 2 147 483 647. DEL-3(30 z 65)

Tworzenie bibliotek DLL Wyst¹pienie dyrektywy jêzyka name umo liwia eksport funkcji lub procedury za pomoc¹ wyspecyfikowanej nazwy, któr¹ podaje siê w postaci ³añcucha. Brak dyrektywy name oznacza, e nazw¹ eksportow¹ jest identyfikator danej funkcji lub procedury, którego wszystkie ma³e litery zosta³y zamienione na wielkie. Nazwa wystêpuj¹ca w dyrektywie name elementu listy klauzuli exports jest t¹ sam¹ nazw¹, któr¹ podaje siê po s³owie name w dyrektywie external w deklaracji importowanej funkcji lub procedury w programie, module lub innej bibliotece DLL. DEL-3(31 z 65)

Tworzenie bibliotek DLL Po wczytaniu biblioteki DLL do pamiêci dla elementów listy klauzuli exports, zawieraj¹cych s³owo resident, informacje o ich nazwach eksportowych s¹ przechowywane w pamiêci, co powoduje skrócenie czasu dostêpu do funkcji i procedur importowanych przez nazwê. Podane dalej przyk³ady przedstawiaj¹ ró ne sposoby ustanawiania ³¹cz pomiêdzy bibliotek¹ i programem w zale noœci od postaci klauzuli exports w bibliotece. DEL-3(32 z 65)

Tworzenie bibliotek DLL Przyk³ad library min_max; function min (const a, b : Extended) : Extended; begin... end; function max (const a, b : Extended) : Extended; begin... end; exports min, max; begin end. DEL-3(33 z 65)

Tworzenie bibliotek DLL Przyk³ad Deklaracje w programie: function min (const a, b : Extended) : Extended; external MIN_MAX.DLL ; function max (const a, b : Extended) : Extended; external MIN_MAX.DLL ; Z uwagi na standardowe przyjêcie nazw eksportowych w bibliotece, deklaracje funkcji min i max w programie mog¹ byæ tak e nastêpuj¹ce: function min (const a, b : Extended) : Extended; external MIN_MAX.DLL name MIN ; function max (const a, b : Extended) : Extended; external MIN_MAX.DLL name 'MAX'; DEL-3(34 z 65)

Tworzenie bibliotek DLL Przyk³ad Nastêpuj¹ce deklaracje s¹ b³êdne: function min (const a, b : Extended) : Extended; external MIN_MAX.DLL index 1; function max (const a, b : Extended) : Extended; external MIN_MAX.DLL index 2; Podczas wykonywania programu wyst¹pi warunek b³êdu EAccessViolation. Poniewa importowanie funkcji odbywa siê przez nazwy, w celu skrócenia czasu dostêpu do nich mo na w klauzulê exports zapisaæ w postaci: exports min resident, max resident; DEL-3(35 z 65)

Tworzenie bibliotek DLL Przyk³ad Dla klauzuli exports postaci exports min name MINAB resident, max name MAXAB resident; deklaracje funkcji w programie powinny byæ nastêpuj¹ce: function min (const a, b : Extended) : Extended; external MIN_MAX.DLL name MINAB ; function max (const a, b : Extended) : Extended; external MIN_MAX.DLL name MAXAB ; DEL-3(36 z 65)

Tworzenie bibliotek DLL Przyk³ad Mo liwe jest te nadanie tym funkcjom w programie nowych nazw: function minimum (const a, b : Extended) : Extended; external MIN_MAX.DLL name MINAB ; function maximum (const a, b : Extended) : Extended; external MIN_MAX.DLL name MAXAB ; Nazwa funkcji (lub procedury) w bibliotece, nazwa eksportowa i nazwa funkcji (procedury) w programie (lub module) mog¹ byæ ró ne! DEL-3(37 z 65)

Tworzenie bibliotek DLL Przyk³ad Je eli klauzula exports bêdzie mia³a postaæ exports min index 1, max index 2; to w programie poprawna bêdzie ka da z poni szych deklaracji: function minimum (const a, b : Extended) : Extended; external MIN_MAX.DLL index 1; function maximum (const a, b : Extended) : Extended; external MIN_MAX.DLL index 2; function minimum (const a, b : Extended) : Extended; external MIN_MAX.DLL name MIN ; function maximum (const a, b : Extended) : Extended; external MIN_MAX.DLL name MAX ; DEL-3(38 z 65)

Tworzenie bibliotek DLL Przyk³ad Je eli klauzula exports bêdzie mia³a postaæ exports min index 1, max index 2; to w programie poprawna bêdzie ka da z poni szych deklaracji: function min (const a, b : Extended) : Extended; external MIN_MAX.DLL index 1; function max (const a, b : Extended) : Extended; external MIN_MAX.DLL index 2; function min (const a, b : Extended) : Extended; external MIN_MAX.DLL name MIN ; function max (const a, b : Extended) : Extended; external MIN_MAX.DLL name MAX ; DEL-3(39 z 65)

Tworzenie bibliotek DLL Biblioteki ³¹czone dynamicznie mog¹ sk³adaæ siê z procedur i funkcji zdefiniowanych w kilku modu³ach. Zazwyczaj w takich przypadkach biblioteka sk³ada siê tylko z deklaracji modu³ów, klauzuli exports i czêœci inicjuj¹cej. Jej struktura jest wówczas nastêpuj¹ca: library nazwa-biblioteki ; uses modu³-1, modu³-2,..., modu³-n; exports modu³-1.nazwa-11 index 1,... modu³-1.nazwa-1k index k,... modu³-n.nazwa-n1 index m nl+n1,... modu³-n.nazwa-nl index m; begin instrukcje-inicjuj¹ce end. DEL-3(40 z 65)

Tworzenie bibliotek DLL Instrukcje czêœci inicjuj¹cej biblioteki s¹ wykonywane tylko raz, podczas wczytywania biblioteki do pamiêci. W chwili wprowadzania do programu kolejnego programu wykorzystuj¹cego dan¹ bibliotekê jest zwiêkszany specjalny licznik jej wykorzystania. Biblioteka pozostaje w pamiêci dopóty, dopóki licznik ten ma wartoœæ wiêksz¹ od zera. Dla wartoœci licznika równej zeru jest wykonywana procedura wyjœcia (zamkniêcia) biblioteki, której adres jest pamiêtany w predefiniowanej zmiennej ExitProc. DEL-3(41 z 65)

Czêœæ inicjuj¹ca zawiera zwykle: instalacjê w³asnej procedury wyjœcia, Biblioteki DLL Tworzenie bibliotek DLL instrukcje przypisuj¹ce wartoœci pocz¹tkowe zmiennym globalnym biblioteki, instrukcje rejestruj¹ce klasy okienek (dotyczy bibliotek wykorzystywanych w programach okienkowych, które napisano przy u yciu biblioteki VCL), instrukcjê sygnalizuj¹c¹ wyst¹pienie b³êdu (najczêœciej jest ona po³¹czona ze sprawdzeniem wartoœci predefiniowanej zmiennej ExitCode, której wartoœæ 0 oznacza bezb³êdne zainicjowanie biblioteki, a wartoœæ tej zmiennej ró na od 0 powoduje usuniêcie biblioteki z pamiêci, a program, który j¹ wywo³a³, sygnalizuje b³¹d wczytywania biblioteki). DEL-3(42 z 65)

Przyk³ad (zainstalowanie w³asnej procedury wyjœcia) Biblioteki DLL Tworzenie bibliotek DLL library Test; var SaveExit : Pointer; procedure LibExit; { w³asna procedura wyjœcia biblioteki } begin... { instrukcje wykonywane przed usuniêciem biblioteki z pamiêci } ExitProc:=SaveExit end; begin... { inicjowanie biblioteki } SaveExit:= ExitProc; { zapamiêtanie wskaÿnika procedury wyjœcia } ExitProc:=@LibExit { zainstalowanie procedury wyjœcia LibExit } end. DEL-3(43 z 65)

B³êdy wykonania w bibliotekach DLL W przypadku wyst¹pienia w bibliotece DLL, w której zadeklarowano modu³ SysUtils, warunku b³êdu lub stanu wyj¹tkowego i nieobs³u enia go, warunek ten jest propagowany na zewn¹trz biblioteki. Gdy biblioteka zosta³a wywo³ana z programu napisanego w jêzyku Delphi Pascal, to warunek mo e byæ w nim obs³u ony za pomoc¹ instrukcji try...except. DEL-3(44 z 65)

B³êdy wykonania w bibliotekach DLL Jeœli jednak dan¹ bibliotekê wywo³a program napisany w innym jêzyku, to nale y go w nim obs³u yæ jako warunek b³êdu œrodowiska Windows o kodzie $0EEDFACE. Informacja o adresie b³êdu jest zawarta w pierwszym elemencie tablicy ExceptionInformation rekordu œrodowiska Windows o nazwie Exception_Record (informacje znajduj¹ siê w systemie pomocy). Drugi element tej tablicy zawiera odwo³anie do obiektu reprezentuj¹cego b³¹d w jêzyku Delphi Pascal. DEL-3(45 z 65)

B³êdy wykonania w bibliotekach DLL Jeœli w bibliotece DLL nie zadeklarowano modu³u SysUtils, to po wyst¹pieniu w niej b³êdu wykonywanie programu, który wywo³a³ bibliotekê, zostanie przerwane (program zostanie usuniêty z pamiêci). Z tego powodu nale y dok³adnie przetestowaæ tak¹ bibliotekê, aby jakiekolwiek b³êdy wykonania nie mog³y w niej wyst¹piæ. DEL-3(46 z 65)

Funkcje i procedury Rodzaje parametrów W zale noœci od sposobu przekazywania wartoœci do procedury lub funkcji, tj. zastêpowania parametrów formalnych argumentami, wyró niamy 10 rodzajów parametrów: parametry przekazywane przez wartoœci, parametry przekazywane przez sta³e okreœlonego typu, parametry przekazywane przez zmienne okreœlonego typu, parametry przekazywane przez sta³e nieokreœlonego typu, parametry przekazywane przez zmienne nieokreœlonego typu, DEL-3(47 z 65)

Funkcje i procedury Rodzaje parametrów W zale noœci od sposobu przekazywania wartoœci do procedury lub funkcji, tj. zastêpowania parametrów formalnych argumentami, wyró niamy 10 rodzajów parametrów: parametry wyjœciowe okreœlonego typu, parametry wyjœciowe nieokreœlonego typu, parametry otwarte, otwarte parametry tablicowe typu wariantowego, parametry o domyœlnej wartoœci. DEL-3(48 z 65)

Funkcje i procedury Parametry przekazywane przez wartoœci Deklaracja: lista-parametrów : typ Poszczególne parametry listy parametrów oddziela siê przecinkami. Typ oznacza identyfikator typu lub s³owo kluczowe string. Dla parametrów typu ³añcuchowego ( string) nie jest dozwolona specyfikacja d³ugoœci ³añcucha. Je eli parametr jest przekazywany przez wartoœæ, to w wywo³aniu procedury (funkcji) odpowiadaj¹cy mu argument mo e byæ wyra eniem. Parametry przekazywane przez wartoœci nie mog¹ byæ typu plikowego i typu strukturalnego o elementach sk³adowych typu plikowego. DEL-3(49 z 65)

Funkcje i procedury Parametry przekazywane przez sta³e okreœlonego typu Deklaracja: const lista-parametrów : typ Parametry tego rodzaju s¹ w treœci procedury lub funkcji traktowane jako zmienne lokalne przeznaczone tylko do odczytu. Argument wywo³ania odpowiadaj¹cy parametrowi przekazywanemu przez sta³¹ okreœlonego typu w ogólnoœci mo e byæ wyra eniem, ale jego typ musi byæ zgodny w sensie przypisania z typem parametru formalnego. Dla parametrów typu ³añcuchowego i strukturalnego zaleca siê stosowaæ parametry przekazywane przez sta³e zamiast przekazywanych przez wartoœci, gdy kompilator generuje dla nich bardziej efektywny kod wynikowy. DEL-3(50 z 65)

Funkcje i procedury Parametry przekazywane przez zmienne okreœlonego typu Deklaracja: var lista-parametrów : typ Argumenty odpowiadaj¹ce parametrom przekazywanym przez zmienn¹ okreœlonego typu musz¹ byæ zmiennymi. Typ odpowiedniej zmiennej musi byæ przy tym identyczny z typem parametru formalnego. Zastosowanie tych parametrów do przekazywania elementów tablic wariantowych nie jest dozwolone. Parametry typu plikowego mog¹ byæ przekazywane tylko przez zmienn¹. DEL-3(51 z 65)

Funkcje i procedury Parametry przekazywane przez sta³e i zmienne nieokreœlonego typu Deklaracje: const lista-parametrów var lista-parametrów Argumenty im odpowiadaj¹ce mog¹ byæ litera³ami lub zmiennymi dowolnych typów. W treœci procedury (funkcji) parametry te nie s¹ zgodne z adnymi innymi zmiennymi. Zgodnoœæ tê uzyskuje siê za pomoc¹ konstrukcji zmiany typu zmiennej, która nadaje parametrom odpowiednie typy. Parametry nieokreœlonego typu s³u ¹ g³ównie do konstrukcji procedur i funkcji przetwarzaj¹cych podobne struktury danych, ale o ró nych rozmiarach. DEL-3(52 z 65)

Funkcje i procedury Parametry wyjœciowe Deklaracje: out lista-parametrów : typ out lista-parametrów Argument odpowiadaj¹cy parametrowi wyjœciowemu musi byæ zmienn¹. Parametry te s¹ przeznaczone do przekazywania wartoœci z procedury lub funkcji na zewn¹trz. Jakiekolwiek wartoœci nadane argumentom odpowiadaj¹cym parametrom wyjœciowym przed wywo³aniem procedury (funkcji) po przekazaniu do procedury (funkcji) s¹ anulowane. DEL-3(53 z 65)

Funkcje i procedury Parametry otwarte Deklaracje: var parametr : array of identyfikator-typu const parametr : array of identyfikator-typu parametr : array of identyfikator-typu Zastosowanie tych parametrów umo liwia przekazywanie do tej samej procedury lub funkcji tablic o ró nych rozmiarach. Parametr aktualny (argument) odpowiadaj¹cy tablicowemu parametrowi otwartemu musi byæ zmienn¹ typu okreœlonego przez identyfikator typu lub tablic¹ elementów o typie okreœlonym przez ten identyfikator. DEL-3(54 z 65)

Funkcje i procedury Parametry otwarte W treœci procedury lub funkcji tablicowy parametr otwarty jest traktowany tak, jakby by³ zadeklarowany za pomoc¹ konstrukcji array [0..n 1] of identyfikator-typu gdzie n oznacza liczbê elementów argumentu. Jeœli argument jest zmienn¹ typu okreœlonego przez identyfikator typu, to traktuje siê go jak tablicê jednoelementow¹ o tym typie. W treœci funkcji lub procedury do okreœlenia liczby elementów tablicy otwartej stosuje siê funkcjê standardow¹ High. DEL-3(55 z 65)

Funkcje i procedury Otwarte parametry tablicowe typu wariantowego S³u ¹ do przekazywania do procedury lub funkcji tablic zawieraj¹cych wartoœci ró nych typów. Typ takiego parametru powinien byæ okreœlony za pomoc¹ konstrukcji array of const która odpowiada konstrukcji array of TVarRec gdzie TVarRec oznacza wariantowy typ rekordowy (predefiniowany w module System), który mo e reprezentowaæ wartoœci ró nych (ale nie wszystkich) typów. DEL-3(56 z 65)

Funkcje i procedury Parametry o domyœlnej wartoœci Deklaracje: const parametr : typ = wyra enie-sta³e parametr : typ = wyra enie-sta³e Parametry z domyœlnymi wartoœciami musz¹ wyst¹piæ jako ostatnie na liœcie parametrów. Ka dy parametr z domyœln¹ wartoœci¹ musi byæ przy tym specyfikowany oddzielnie (u ycie listy parametrów nie jest dozwolone). DEL-3(57 z 65)

Funkcje i procedury Konwencje wywo³ania W jêzyku Delphi Pascal wystêpuje piêæ dyrektyw (register, pascal, cdecl, stdcall i safecall), za pomoc¹ których ustala siê sposób przekazywania parametrów w funkcjach, procedurach i metodach. Ustalenia te, zwane konwencjami wywo³ania, dotycz¹: kolejnoœci przekazywania parametrów, automatycznego usuwania parametrów ze stosu, u ywania rejestrów przez parametry, obs³ugi warunków b³êdów i stanów wyj¹tkowych. DEL-3(58 z 65)

Funkcje i procedury Konwencje wywo³ania register dyrektywa domyœlna (nie wymaga okreœlania); parametry s¹ przekazywane od strony lewej do prawej, a wiêc w kolejnoœci ich wyspecyfikowania; przy przekazywaniu parametrów zostanie wykorzystanych od jednego do trzech rejestrów procesora (EAX, EDX oraz ECX); po wykonaniu funkcji lub procedury wszystkie parametry zostan¹ automatycznie usuniête ze stosu pascal jw., ale rejestry procesora nie bêd¹ u ywane DEL-3(59 z 65)

Funkcje i procedury Konwencje wywo³ania stdcall przekazywanie parametrów od strony prawej do lewej i brak u ywania w tym procesie rejestrów procesora; po zakoñczeniu wykonywania funkcji lub procedury parametry zostan¹ usuniête ze stosu cdecl jw., ale usuniêcie parametrów ze stosu musi byæ zabezpieczone w miejscu wywo³ania danej funkcji lub procedury (po jej wykonaniu i przekazaniu z niej sterowania); zaprogramowanie odpowiednich instrukcji (zwykle w asemblerze) jest zadaniem programisty. safecall dotyczy wy³¹cznie metod ³¹cz dualnych (pomijamy) DEL-3(60 z 65)

Funkcje i procedury Konwencje wywo³ania Domyœlna konwencja wywo³ywania ( register) jest najbardziej efektywna, gdy wskutek wykorzystywania rejestrów procesora czêsto nie potrzeba umieszczaæ parametrów w stosie (dzieje siê tak zawsze, gdy liczba parametrów nie przekracza trzech). Konwencje okreœlone dyrektywami pascal i cdecl stosuje siê zwykle przy wywo³ywaniu funkcji i procedur z bibliotek ³¹czonych dynamicznie napisanych w jêzykach C, C++ lub innych. W przypadku wywo³ywania funkcji œrodowiska Windows stosuje siê konwencjê okreœlon¹ dyrektyw¹ stdcall. DEL-3(61 z 65)

Funkcje i procedury Przeci¹ anie W obrêbie tego samego zakresu wa noœci identyfikatorów mo na zdefiniowaæ wiêcej ni jedn¹ funkcjê i (lub) procedurê o takiej samej nazwie. Wielokrotne definiowanie funkcji i procedur o takich samych nazwach nazywa siê przeci¹ aniem (ang. overloading). W definicjach funkcji i procedur przeci¹ anych jest konieczne wyspecyfikowanie dyrektywy jêzyka overload. DEL-3(62 z 65)

Funkcje i procedury Przeci¹ anie Jeœli dwie lub wiêcej funkcji i (lub) procedur przeci¹ onych ma tak¹ sam¹ nazwê, to powstaje pytanie: w jaki sposób nastêpuje identyfikacja odpowiedniej funkcji i (lub) procedury w chwili wywo³ania? Odpowiedzi¹ na to pytanie jest regu³a, e takie funkcje i procedury musz¹ ró niæ siê liczb¹ lub typami parametrów. W chwili wywo³ania funkcji lub procedury przeci¹ onej w³aœnie po liczbie lub typach argumentów nastêpuje odpowiednia identyfikacja. DEL-3(63 z 65)

Funkcje i procedury Przeci¹ anie Przyk³ad Za³ó my, e zdefiniowano dwie funkcje przeci¹ one: function suma (a, b, c : Real) : Real; overload ; begin Result:=a+b+c end; function suma (a, b, c : Integer) : Integer; overload ; begin Result:=a+b+c end; W instrukcji x:=suma(1, 2, 3); zostanie wywo³ana druga funkcja suma, a w instrukcji z:=suma(1, 2, 3.0); pierwsza (pierwsze dwa argumenty zostan¹ zamienione na typ Real). DEL-3(64 z 65)

... to ju (dopiero) koniec na dzisiaj... DEL-3(65 z 65)