LTC4W 03 - Thu Vien Lien Ket Dong DLL

Embed Size (px)

Citation preview

Lp trnh trn mi trng Windows

TH VIN LIN KT NG (DLL Dynamic Link Library)

Ni dung trnh by Gii thiu Xy dng DLL Cch thc gi DLL trong ng dng V d minh ho

1

Gii thiu Lin kt (Linking) l g ? Cc loi th vin nh ngha DLL DLL v c ch qun l b nh

Gii thiu Gi thi

Lin kt l g ? Lin kt (linking) l cch thc m trnh bin dch nhng/kt hp cc on m thc thi ca nhng module th vin (Lib) vo chng trnh C 2 cch lin kt: Lin kt tnh (Static linking) Lin kt ng (Dynamic linking)

2

Gii thiu cc loi th vin Gi thi c lo vi

Th vin lin kt tnh Th vin lin kt tnh: static linking library vi k t Dng file: .LIB Cha m lnh nh phn ca cc hm th vin Ch l nh c c h vi Dng nhng vo file chng trnh khi thc hin giai nh v tr th hi on lin kt (linking) ca qu trnh bin dch o k c qu tr d Trnh bin dch s copy on m lnh ca hm th vin Tr d s o l c h vi vo trong nhng module gi nh g

Gii thiu cc loi th vin Gi thi c lo vi

Th vin lin kt tnh u im i D thc hin Chng trnh c th chy c lp, khng cn cc file km theo Chng trnh s chy nhanh hn (nu kch thc nh)

Khuyt im Khuy i on m lnh c nhng vo file chng trnh kch thc chng trnh ln, tn b nh on m lnh c nhng vo nhiu file chng trnh khc nhau khng ti u Khi thay i hm th vin phi bin dch li ton b cc file chng trnh

3

Gii thiu cc loi th vin Gi thi c lo vi

Th vin lin kt ng Th vin lin kt ng: dynamic linking library vi k Dng file: .LIB v .DLL v File .LIB: Th vin nhp (Import library). Khng cha m lnh ca cc hm, Ch cha cc thng tin cn thit H iu hnh np th vin DLL v xc nh cc hm export trong DLL S dng khi dng cch thc load-time dynamic linking

File .DLL: Cha m lnh nh phn ca cc hm th vin c ti vo b nh khi ng dng gi hm th vin Cn c khi thc hin ng dng

Gii thiu cc loi th vin Gi thi c lo vi

Th vin lin kt ng M lnh ca cc hm s khng c nhng vo trong file chng trnh ca ng dng ng dng ch cn lu thng tin ca hm th vin, v khi cn, h iu hnh s ti cc hm th vin vo b nh

4

Gii thiu cc loi th vin Gi thi c lo vi

Th vin lin kt ng u im: i Kch thc ca ng dng nh Nhiu ng dng c th dng chung 1 DLL, do , tit kim b nh (thng thng, cc ng dng c data ring, nhng c th chia s m lnh) Khi khng cn s dng, c th gii phng DLL khi b nh Khi cn nng cp, ch cn thay th file DLL, cc file chng trnh khc khng b nh hng Khuyt im: Khuy i Kh s dng

Gii thiu Gi thi

nh ngha DLL L th vin cha cc hm v d liu c th c gi t cc module khc (module c th l 1 ng dng EXE hay l mt DLL khc) DLL c np vo b nh lc thc thi v c nh x vo vng nh ca tin trnh gi DLL c th cha 2 loi hm th vin: Export: c php gi t cc module khc Internal: ch c dng ni b trong DLL

5

Gii thiu Gi thi

DLL v c ch qun l b nh Mi tin trnh (process) s np DLL vo khng gian a ch ti tr s v ch o (virtual address space) ca chnh tin trnh c ch ti tr H iu hnh qun l 1 bin m (Count) cho mi DLL. i h qu bi (Count) m Bin Count c tng ln 1 khi DLL c np (bi hm Bi khi n (b h LoadLibrary); v b gim i 1 khi c gii phng (bi LoadLibrary); v gi khi gi ph (b hm FreeLibrary) Khi bin Count=0 hay process kt thc, DLL c gii bi k th gi phng khi b nh ph kh b nh

Gii thiu Gi thi

DLL v c ch qun l b nh Cc hm DLL c thc thi trong ng cnh ca tiu trnh (Thread) gi hm, do : DLL s dng Stack ca tiu trnh DLL s dng khng gian a ch o ca tin trnh gi DLL cp pht b nh cho nhng bin ng trn khng gian a ch o ca tin trnh gi

6

Xy dng DLL Xy dng DLL bng th vin Win32 API Xy dng DLL bng th vin MFC

Xy dng DLL d

S dng th vin Win32 API V d to lp DLL Phn tch cc khai bo Phn tch hm DllMain V d lin kt DLL vi 1 ng dng

7

Xy dng DLL s dng th vin Win32 API d s vi

V d to lp DLL Chn menu File New Chn tab Projects Chn loi project Win32 Dynamic Link Library t tn project v xc nh ng dn th mc trong Location Step 1: Chn loi ng dng A DLL that exports some symbols Nhn Finish kt thcVisual Studio 6.0

Xy dng DLL s dng th vin Win32 API d s vi

V d to lp DLL Chn menu File \ New \ Project Chn loi project Win32 Project t tn project v xc nh ng dn th mc trong Location Trong hp thoi Application Settings, chn Application type: DLL. Chn Exports symbols Nhn Finish kt thcVisual Studio 2005

8

Xy dng DLL s dng th vin Win32 API d s vi

V d to lp DLL

Visual Studio 2005

Xy dng DLL s dng th vin Win32 API d s vi

Phn tch khai bo.h #define DLLEXPORT __declspec(dllexport) #define DLLIMPORT __declspec(dllimport) // V d khai bo 1 bin xut khu DLLEXPORT int nDll=0; // V d khai bo 1 hm xut khu DLLEXPORT int fnDll(void);

dllexport (xut khu): cung cp hm, d liu, ti nguyn, cho cc chng trnh/DLL khc s dng

9

Xy dng DLL s dng th vin Win32 API d s vi

Phn tch khai bo dllimport (nhp khu): l np 1 hm, hay d liu, hay ti nguyn, t 1 DLL khc s dng Mi DLL c th import hm/d liu t cc DLL khc; v s export hm/d liu ca chnh n

Xy dng DLL s dng th vin Win32 API d s vi

Phn tch khai bo.h