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