Professional Documents
Culture Documents
DLL
DLL
Ni dung
Spring 2004
Gii thiu
Spring 2004
Lin kt 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)
Spring 2004
Gii thiu Cc loi th vin Th vin lin kt tnh (Static linking library)
Dng file: .LIB Cha m lnh nh phn ca cc hm th vin Dng nhng vo file chng trnh khi thc hin giai on lin kt (linking) ca qu trnh bin dch Trnh bin dch s copy on m lnh ca hm th vin vo trong nhng module gi u im:
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)
Spring 2004
Spring 2004
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
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
C4W - DLL - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 7
Khuyt im:
Kh s dng hn
C4W - DLL - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 8
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 run-time v c map 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
C4W - DLL - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 9
Mi tin trnh (process) s np DLL vo khng gian a ch o (virtual address space) ca chnh tin trnh H iu hnh qun l 1 bin m (Count) cho mi DLL. Bin Count c tng ln 1 khi DLL c np (bi hm LoadLibrary); v b gim i 1 khi c gii phng (bi hm FreeLibrary) Khi bin Count=0 hay process kt thc, DLL c gii phng khi b nh
C4W - DLL - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 10
Spring 2004
11
Xy dng DLL
Xy dng DLL bng th vin Win32 API Xy dng DLL bng th vin MFC
Spring 2004
12
V d to lp DLL Phn tch cc khai bo Phn tch hm DllMain V d lin kt DLL vi 1 ng dng
Spring 2004
13
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 thc
Spring 2004
14
// 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
C4W - DLL - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 15
Spring 2004
16
Xy dng DLL Dng th vin Win32 API(tt) Phn tch hm DllMain (tt)
DLL_PROCESS_ATTACH:
Hm DllMain vi tham s DLL_PROCESS_ATTACH c gi khi process tin hnh load DLL Th vin DLL ang c Windows nh x vo vng nh ca tin trnh (thc hin li gi DLL). y l c hi DLL khi to cc bin, cp pht vng nh hay nhng thao tc cn thit khc trc khi cho php tin trnh gi n cc hm ca th vin
DLL_PROCESS_DETATCH:
Th vin DLL c gii phng khi vng nh ca tin trnh do 1 trong 3 nguyn nhn: np DLL khng thnh cng, tin trnh kt thc, hay tin trnh gi hm FreeLibrary y l c hi gii phng cc bin hay ti nguyn m DLL cp pht
C4W - DLL - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 19
Xy dng DLL Dng th vin Win32 API(tt) Phn tch hm DllMain (tt)
DLL_THREAD_ATTACH:
Khi tin trnh to mi 1 tiu trnh (thread), Windows gi hm DllMain ca tt c cc th vin DLL ang c s dng vi tin trnh y l c hi khi to cc bin dng cho tiu trnh Lu rng tnh hung ny ch xy ra khi tiu trnh c to sau khi th vin DLL load vo tin trnh, c ngha rng nu DLL c load bng hm LoadLibrary th tt c cc tiu trnh hin c (trong tin trnh) s khng gi hm DllMain vi tham s ny
DLL_THREAD_DETACH:
Khi 1 tiu trnh kt thc, Windows gi hm DllMain ca tt c cc th vin DLL ang c s dng vi tin trnh ny y l c hi gii phng cc bin dng cho tiu trnh
C4W - DLL - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 20
Spring 2004
21
V d to lp DLL Phn tch cc khai bo nh ngha hm export Cc dng th vin DLL ca MFC
Spring 2004
22
V d to lp DLL
Chn menu File New Chn tab Projects Chn loi project MFC AppWizard (dll) t tn project v xc nh ng dn th mc trong Location Step 1: Chn loi ng dng Regular DLL using shared MFC DLL Nhn Finish kt thc
Spring 2004
23
Spring 2004
24
nh ngha hm export
<DLL-Name>.cpp
#define DLLEXPORT #define DLLIMPORT __declspec(dllexport) __declspec(dllimport)
Spring 2004
25
Cch thc tm kim file DLL Load-time Dynamic Linking Run-time Dynamic Linking
Spring 2004
28
Spring 2004
29
Cch thc gi DLL trong ng dng Load-time ng dng s gi hm export ca DLL mt cch tng minh (ging nh cch gi hm ca th vin lin kt tnh) ng dng cn phi lin kt vi file th vin nhp (Import Lib) ca DLL ng dng s np DLL ngay thi im u tin chng trnh chy u im:
n gin, d s dng v ging nh cch dng th vin tnh
Khuyt im:
Nu khng tm ra DLL lc np, ng dng s kt thc ngay
C4W - DLL - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 30
Cch lm:
Add file th vin nhp (DllName.lib) vo project Khai bo cc hm, bin IMPORT t DLL Gi hm ca th vin DLL nh gi hm bnh thng
Spring 2004
31
Cch lm:
ng dng s dng hm LoadLibrary hay LoadLibraryEx np DLL ti thi im cn thit Sau khi DLL c np, ng dng s dng hm GetProcAddress ly a ch ca hm export trong DLL ng dng s gi hm export trong DLL bng cch dng con tr hm tr v t hm GetProcAddress Cch ny khng cn dng n file th vin nhp (Import Lib.)
C4W - DLL - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 32
u im:
C th x l li khng tm thy DLL, trnh kt thc ng dng tc thi, th hin thng bo li do ng dng qui nh
Spring 2004
33
Cm n - Hi & p
Spring 2004
35