You are on page 1of 43

i Hc S Phm Tp.

H Ch Minh Khoa Ton Tin Hc

LP TRNH WINDOWS

Th vin lin kt ng
( (DLL DYNAMIC LINK LIBRARY) )

Gii thiu th vin lin kt Cc loi th vin lin kt Xy dng th vin lin kt ng
Trn Ngc Bo - Email: tnbao.dhsp@gmail.com

i Hc S Phm Tp. H Ch Minh Khoa Ton Tin Hc

LP TRNH WINDOWS

Th vin lin kt ng
( (DLL DYNAMIC LINK LIBRARY) )

Gii thiu th vin lin kt Cc loi th vin lin kt Xy dng th vin lin kt ng

GII THIU LIN KT L G ?


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

CT K ton

CT Nhn s

CT Tin lng

Source code

Source code

Source code

KT.EXE

NS.EXE

TL.EXE

CSDL
TRN NGC BO

CSDL
KHOA TON -TIN HC

CSDL
I HC S PHM TP.HCM (3)

GII THIU LIN KT L G ?


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

CT K ton t

CT Nhn s

CT Tin lng

Source code

Source code

Source code

KT.EXE

NS.EXE

TL.EXE

CSDL
TRN NGC BO KHOA TON -TIN HC I HC S PHM TP.HCM (4)

GII THIU LIN KT L G ?


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Module K ton

Module Tin lng

KT.DLL

DataAccess.DLL

TL.DLL

CSDL
TRN NGC BO KHOA TON -TIN HC I HC S PHM TP.HCM (5)

GII THIU LIN KT L G ?


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Th vin l mt tp tin cha nhng hm hoc ti nguyn khc c sn m cc ng dng c th ly s dng. C ti nguyn ny th cho php nhiu d Cc thng h h hi ng dng cng chia s s dng d dng mt on m hoc ti nguyn Lin kt l cch thc m trnh bin dch nhng/kt hp cc on m thc thi ca nhng module th vin ( ) vo (Lib) chng trnh C 2 cch lin kt: Lin kt tnh Lin kt ng
TRN NGC BO KHOA TON -TIN HC I HC S PHM TP.HCM (6)

i Hc S Phm Tp. H Ch Minh Khoa Ton Tin Hc

LP TRNH WINDOWS

Th vin lin kt ng
( (DLL DYNAMIC LINK LIBRARY) )

Gii thiu th vin lin kt Cc loi th vin lin kt Xy dng th vin lin kt ng

GII THIU CC LOI TH VIN


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Th vin lin kt tnh (Static Linking Library) - Dng file: .LIB - Ch m lnh nh phn ca cc hm th vin Cha l h h h h th i - Dng nhng vo file chng trnh khi thc hin giai on g g g g lin kt (linking) ca qu trnh bin dch - Trnh bin dch s copy on m lnh ca cc hm th vin vo trong nhng module gi chng

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(8)

TH VIN LIN KT TNH


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Th vin lin kt

Chng trnh chnh

Source code

Source code

Compiler

Compiler

LIB

Linker

OBJ files

AB.EXE
TRN NGC BO KHOA TON -TIN HC I HC S PHM TP.HCM (9)

TH VIN LIN KT TNH


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

u im
- D thc hin - Chng trnh c th chy c lp, khng cn cc file km theo - Chng trnh chy nhanh hn v khng cn thc hin load th vin

Khuyt im y
- on m lnh c nhng vo chng trnh ln, tn b nh. kch thc chng trnh

- on m lnh c nhng vo nhiu file chng trnh khc nhau khng ti u g - Khi thay i hm th vin trnh
TRN NGC BO

phi bin dch li ton b cc file chng

KHOA TON -TIN HC

I HC S PHM TP.HCM

(10) 10)

TH VIN LIN KT NG
BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Th vin lin kt ng (Dynamic Linking Library)


- Dng file: .LIB v DLL - File .LIB 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 phi chp tp tin i km khi thc thi ng dng

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(11) 11)

TH VIN LIN KT NG
BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Th vin lin kt
Source code S (Source file)

Chng trnh chnh

Source code

Compiler

Source code (Header files)

Compiler

DLL

Linker

OBJ files

AB.EXE
TRN NGC BO KHOA TON -TIN HC I HC S PHM TP.HCM (12) 12)

TH VIN LIN KT NG
BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

u im
- M lnh ca cc hm s khng c nhng vo trong file chng trnh ca ng g g g g g dng Kch thc ca ng dng nh - ng dng ch cn lu thng tin ca hm th vin, khi cn h iu hnh s load cc hm th vin vo b nh Nhiu ng dng c th dng chung 1 DLL. Do , tit kim b nh (thng thng mi 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
- Kh s dng hn

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(13) 13)

i Hc S Phm Tp. H Ch Minh Khoa Ton Tin Hc

LP TRNH WINDOWS

Th vin lin kt ng
( (DLL DYNAMIC LINK LIBRARY) )

Gii thiu th vin lin kt Cc loi th vin lin kt Xy dng th vin lin kt ng

XY DNG DLL
BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Xy dng th vin DLL bng th vin Win32API

Chn loi Project: Win32 Dynamic Link Library

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(15) 15)

XY DNG DLL
BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Xy dng th vin DLL bng th vin MFC

Chn loi Project: MFC AppWizard(Dll) MFC AppWizard(Dll) TRN NGC BO KHOA TON -TIN HC I HC S PHM TP.HCM (16) 16)

XY DNG DLL DNG TH VIN WIN32 API


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

To lp DLL p Ph tch cc khai bo n h kh b Phn tch hm DllMain Demo lin kt DLL vi ng dng

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(17) 17)

XY DNG DLL DNG TH VIN WIN32 API


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Chn menu File Chn Tab Projects

New

Chn loi project Win32 Dynamic Link Library Win32 Library t tn project trong Project name Xc nh ng dn th mc trong Location Step 1: Chn loi ng dng A DLL that exports some St 1 Ch l i d th t t symbols Nh Finish kt thc n

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(18) 18)

XY DNG DLL DNG TH VIN WIN32 API


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

dllexport: cung cp hm, d liu, ti nguyn,cho cc chng trnh/DLL


khc s dng #define DLLEXPORT __declspec(dllexport) //Khai bo 1 bin xut khu xut khu DLLEXPORT int nMyValue; //Khai bo 1 hm xut khu DLLEXPORT int MyFunction(void)

dllimport: load 1 hm, d liu, ti nguyn,t 1 DLL khc s dng


#define DLLIMPORT __declspec(dllimport) //Khai bo 1 bin nhp khu nhp khu DLLIMPORT int nMyValue; //Khai bo 1 hm nhp khu DLLIMPORT int MyFunction(void) TRN NGC BO KHOA TON -TIN HC I HC S PHM TP.HCM (19) 19)

XY DNG DLL DNG TH VIN WIN32 API


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Phn tch hm DllMain


BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul reason for call) (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL THREAD ATTACH: DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } TRN NGC BO KHOA TON -TIN HC I HC S PHM TP.HCM (20) 20)

XY DNG DLL DNG TH VIN WIN32 API


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Phn tch hm DllMain (tt)


Hm DllMain l hm chnh ca DLL Hm DllMain c gi khi DLL c load vo b nh hoc khi Windows yu cu DLL kt th ( l d khi b nh) thc (unload h) Hm DllMain c nhim v khi to hoc gii phng cc ti nguyn s dng cho DLL (nu c) Cc tham s: hModule: handle ca DLL do Windows to ra DLL, ul_reason_for_call: l do hm DllMain c gi

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(21) 21)

XY DNG DLL DNG TH VIN WIN32 API


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

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) bin, y l thi im 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_DETACH: 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 cng, thc hm FreeLibrary y l thi im gii phng cc bin hay ti nguyn m DLL cp pht

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(22) 22)

XY DNG DLL DNG TH VIN WIN32 API


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Phn tch hm DllMain (tt)


DLL_THREAD_ATTACH: DLL THREAD ATTACH: Khi tin trnh to mi mt tiu trnh (Thread), Windows gi hm DllMain ca tt
c cc th vin DLL ang c s dng vi tin trnh . y l thi im 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 ngha l n DLL c load bng hn LoadLibrar th o trnh, nu c LoadLibrary 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 tiu trnh ny. y l thi im gii phng cc bin dng cho tiu trnh

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(23) 23)

LIN KT DLL VI NG DNG WIN32 API


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

To Project loi Win32 Dynamic Link Library, vi tn MyWin32DLL y To Project loi Win32 Application vi tn l MyWin32Sample y p Bin dch v chy chng trnh Copy tp tin MyWin32DLL.DLL vo th mc Debug ca MyWin32Sample Copy tp tin MyWin32DLL.LIB v tp tin MyWin32DLL.H vo th mc MyWin32Sample Add tp tin MyWin32DLL.LIB vo project y p MyWin32Sample
TRN NGC BO KHOA TON -TIN HC I HC S PHM TP.HCM (24) 24)

XY DNG DLL DNG TH VIN MFC


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

To lp DLL p Phn tch cc khai bo

nh h hm h ngha h export t
Cc dng th vin DLL ca MFC Lin kt DLL vi ng dng

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(25) 25)

XY DNG DLL DNG TH VIN MFC


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Chn menu File Chn Tab Projects

New

Chn loi project MFC AppWizard (dll) MFC (dll) t tn project trong Project name Xc nh ng dn th mc trong Location Step 1: Chn loi ng dng R St 1 Ch l i d Regular DLL using l i shared MFC DLL hoc MFC Extension DLL Nh Finish kt thc n

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(26) 26)

CC DNG TH VIN DLL CA MFC


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N


TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(27) 27)

CC DNG TH VIN DLL CA MFC


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Regular DLL: Ch export cc hm theo dng C-style, khng th export class, hm thnh
phn ca class cc hm nh ngha chng (overloaded function) class, (o erloaded f nction) Cc ng dng Win32 v MFC u c th s dng loi DLL with MFC statically linked: DLL s c lin kt vi cc DLL chun ca MFC with linked : theo cch lin kt tnh using shared MFC DLL: DLL s c lin kt vi cc DLL chun ca MFC theo h lin th cch li kt ng

MFC Extention DLL: Cho php export cc class. ng dng khc c th to cc project t cc
class, hoc xy dng cc li k tha t class ny. DLL s c lin kt vi cc DLL chun ca MFC theo cch lin kt ng Ch c cc ng dng MFC mi c th dng vi loi DLL ny.

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(28) 28)

CCH THC GI DLL TRONG NG DNG


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Cch thc tm kim file DLL LoadLoad time Dynamic Linking

Run-time Dynamic Linking

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(29) 29)

NG DNG TM KIM FILE DLL


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

H iu hnh Windows s tm file DLL c s dng trong ng dng theo th t cc th mc sau


- Th mc cha tp tin EXE g DLL ny p gi y - Th mc hin hnh - Th mc system, system32 h 32 - Th mc Windows - Cc th mc c lit k trong bin mi trng PATH

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(30) 30)

CCH THC GI DLL TRONG NG DNG Load-time


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

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 ch 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

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(31) 31)

CCH THC GI DLL TRONG NG DNG Load-time


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Cch thc hin - 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

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(32) 32)

CCH THC GI DLL TRONG NG DNG Run-time


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

ng dng s gi hm LoadLibrary hay LoadLibraryEx np DLL ti thi im cn thit Sau khi DLL c np, ng dng s dng hm GetProcessAddress 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 GetProcessAddress u im: - Cch ny khng cn dng n file th vin nhp (DllName LIB) (DllName.LIB) - 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

Khuyt im: - Phc tp, kh s dng trong ci t


TRN NGC BO KHOA TON -TIN HC I HC S PHM TP.HCM (33) 33)

CCH THC GI DLL TRONG NG DNG Run-time


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

V d: gi hm MyFunction(LPTSTR) t th vin MYDLL.DLL


typedef VOID (*MYPRO) (LPTSTR); HINSTANCE hInsLib ; MYPROC ProcAddr; hInsLib = LoadLibrary(MYDLL); ( ) if (hInsLib !=NULL) { ProcAddr = (MYPRO) GetProcessAddress(hInsLib,MyFunction); if (ProcAddr !=NULL) { (ProcAddr)(A parameter string) ; FreeLibrary(hInsLib); F Lib (hI Lib) } }

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(34) 34)

XY DNG TH VIN DLL BNG MFC


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Xy dng th vin MFC Extention DLL MyFirstDLL


class AFX EXT CLASS CM Cl l AFX_EXT_CLASS CMyClass : public CObject bli CObj t { public: void SetFirstName(CString s); void ShowMessageBox(); CMyClass(); virtual ~CMyClass(); protected: CString m_FirstName; };

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(35) 35)

XY DNG TH VIN DLL BNG MFC


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Xy dng th vin MFC Extention DLL MyFirstDLL


CMyClass::CMyClass() y y () { m_FirstName=MyFirstDLL Sample"; y p ; } void CMyClass::ShowMessageBox() { AfxMessageBox(m_FirstName); } void CMyClass::SetFirstName(CString s) { m_FirstName = s; } TRN NGC BO KHOA TON -TIN HC I HC S PHM TP.HCM (36) 36)

XY DNG TH VIN DLL BNG MFC


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

To ng dng MyFirstDLLSample s dng th vin MyFirstDLL


void CMFCSampleDllView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CMyClass my; my.ShowMessageBox(); my.SetFirstName("abc"); my.ShowMessageBox();

CView::OnLButtonDown(nFlags, point); }

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(37) 37)

XY DNG TH VIN DLL BNG MFC


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Thay i hm ShowMessageBox trong th vin MyFirstDLL


void CMyClass::ShowMessageBox() y g () { AfxMessageBox(m_FirstName); } void CMyClass::ShowMessageBox() { AfxMessageBox(m_FirstName); AfxMessageBox(DllSample: + m_FirstName); }

Rebuild th vin MyFirstDLL Copy tp tin MyFirstDLL.DLL vo th mc MyFirstDLLSample\Debug

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(38) 38)

XY DNG TH VIN DLL BNG MFC


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Run chng trnh MyFirstDLLSampleiu g xy ra khi click iu


chut tri ln mn hnh chng trnh MyFirstDLLSample ? void CMFCSampleDllView::OnLButtonDown(UINT nFlags, CPoint point) { CMyClass my; my.ShowMessageBox(); my.SetFirstName("abc"); my.ShowMessageBox();

CView::OnLButtonDown(nFlags, point); } TRN NGC BO KHOA TON -TIN HC I HC S PHM TP.HCM (39) 39)

XY DNG TH VIN DLL BNG MFC


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Xy dng th vin MySecondDLL MFC Extention DLL c s dng resource

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(40) 40)

XY DNG TH VIN DLL BNG MFC


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Lin kt MySecondDLL vi ng dng MyFirstDLLSample


#include "MyLoginDlg.h" void CMFCSampleDllView::OnRButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CMyLoginDlg dlg; dlg.DoModal(); CView::OnRButtonDown(nFlags, CView::OnRButtonDown(nFlags point); }

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(41) 41)

TI LIU THAM KHO


BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N

Charles Petzold (1998), Programming Windows Fifth Edition, Microsoft Press Chapter 21 David J. Kruglinski (1998), Programming Microsoft Visual C++ Fifth Edition, Microsoft Press Chapter 22

TRN NGC BO

KHOA TON -TIN HC

I HC S PHM TP.HCM

(42) 42)

BI GI ING H PHN LP TR C N RNH WINDOWS S

TH VIN LIN KT NG - DLL N


TRN NGC BO KHOA TON -TIN HC I HC S PHM TP.HCM (43) 43)

You might also like