dinaminės bibliotekos (dll)

12
Dinaminės bibliotekos (DLL)

Upload: levia

Post on 31-Jan-2016

46 views

Category:

Documents


0 download

DESCRIPTION

Dinaminės bibliotekos (DLL). DLL bibliotekos. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Dinaminės bibliotekos (DLL)

Dinaminės bibliotekos (DLL)

Page 2: Dinaminės bibliotekos (DLL)

DLL bibliotekos

• Dinaminės bibliotekos yra svarbi strūktūrinė MS Windows komponentė. Ji leidžia sukompiliuoti kodo fragmentus į vieną biblioteką, panaudojamą daugelio programų. Skirtumas tarp DLL ir statinės bibliotekos yra toks, kad DLL’as nėra vykdomasis failas. Jis lieka atskiru moduliu. Tai leidžia vykdomuosius failus išlaikyti palyginti mažo dydžio.

• DLL modulio kūrimas priklauso nuo kompiliatoriaus, tačiau pats programavimas yra universalus

Page 3: Dinaminės bibliotekos (DLL)

_declspec

• Tai raktažodis, kuris nėra ANSI C standarto dalis, bet dauguma kompiliatorių jį supranta. _declspec leidžia nurodyti įvairias nestandartines parinktis, kurios apsprendžia programos veikimo būdą. Aptarsime dvi pagrindines nuostatas:

• _declspec(dllexport)

• _declspec(dllimport)

Page 4: Dinaminės bibliotekos (DLL)

dllexport

• Šis raktažodis nurodo funkcijas, kurios bus prieinamos kitoms programoms. Priešingu atveju funkcijos bus naudojamos tik bibliotekos viduje. Šis identifikatorius turi būti nurodytas tiek funkcijos prototipe, tiek jos apraše.

Page 5: Dinaminės bibliotekos (DLL)

dllimport

• Norėdami pasinaudoti tokia funkcija ją turime importuoti į savo programą. Tam reikia susieti programą su biblioteka ir programoje apibrėžti funkcijos prototipą naudojanti raktažodžiu dllimport:

Page 6: Dinaminės bibliotekos (DLL)

Programavimo gudrybės

Būtų paprasčiau, jei užtektų tik vieno raktažodžio ar ne?

Page 7: Dinaminės bibliotekos (DLL)

DllMain

• Kai Windows’ai susieja DLL’ą su programa, būna kviečiama bibliotekos DllMain funkciją:

• APIENTRY – raktažodis naudojamas Windows’ų viduje, todėl apie jį galime pamiršti

• hInstance – galime naudoti, galime ir ne. Šis kintamasis skirtas bibliotekai.

Page 8: Dinaminės bibliotekos (DLL)

reason gali įgyti vieną iš keturių reikšmių:

DllMain funkcija turi grąžinti TRUE, jei biblioteka įkelta sėkmingai, ir FALSE, jei įvyko klaida

Reikšmė Kam skirta

DLL_PROCESS_ATTACH Nauja programa susisiejo su biblioteka pirmą kartą

DLL_PROCESS_DETACH Programa atsisiejo nuo bibliotekos

DLL_THREAD_ATTACH Programos gija susisiejo su biblioteka

DLL_THREAD_DETACH Programos gija atsisiejo nuo bibliotekos

Page 9: Dinaminės bibliotekos (DLL)

Funkcijos šablonas

Page 10: Dinaminės bibliotekos (DLL)

Susiejant DLL

• Statinis susiejimas – kompiliatorius sugeneruos du failus: DLL ir LIB. LIB failas veikia kaip maža statinė biblioteka nurodo saistyklei (linker) statiškai susisieti su nurodytu DLL failu.

• Dinaminis susiejimas – tikroji bibliotekų galia yra programos gebėjimas darbo metu ją įsikelti. Tai esminis mechanizmas programų kurios leidžia papildinius(plugin) ir plėtinius (extension).

Page 11: Dinaminės bibliotekos (DLL)

Kaip veikia dinaminė sąsaja?

• Iškviečiame biblioteką funkcijos LoadLibrary pagalba ir ir perduodame identifikatorių vienai iš galimų funkcijų. Jei biblioteka nėra šakniniame kataloge, reikia nurodyti kur ją rasti funkcijos SetDllDirectory pagalba.

• HMODULE yra bibliotekos identifikatorius (HANDLE)

Page 12: Dinaminės bibliotekos (DLL)

Ką galime daryti?

• GetProcAddress – grąžina funkcijos rodyklę į funkciją bibliotekoje

• LoadResource – nuskaito DLL’o išteklius

• FreeLibrary – pašalina biblioteką pagal nurodytą identifikatorių iš atminties