Kada recimo pravis vise aplikacija koje koriste iste slicice za menije i toolbar, iste textove za prikaz u porukama, iste funkcije za ucitavanje fajlova i slicno glupo je da u svakoj aplikaciji pises sve to iz pocetka i samim tim u velicinu aplikacije ulaze i velicine tih slikica i ostalih stvarcica. Zato napises jedan (ili vise) DLL-ova koji ce to sve da sadrze, a u aplikacijama samo pozivas sve sto ti treba iz DLL-a. Time dobijas manju velicinu exe fajla, vise razlicitih aplikacija mogu da koriste jedan DLL, update je laksi (dovoljno je samo da promenis jedan DLL i u njega stavis nove slicice ili prevedes text na neki drugi jezik i sve aplikacije koje koriste taj DLL ce poprimiti nov izgled i "nauciti" da pisu drugim jezikom). Postoje i neke funkcije u operativnom sistemu koje zahtevaju DLL. Recimo Windows Hooks... da bi pratio sta neko u bilo kom programcicu kucka na tastaturi i to cuvao u nekom fajlu moras da napravis WinHook u DLL.
Sto se povezivanja sa DLL-om tice imas dva nacina staticki i dinamicki. Staticki je laksi nacin, ali ima svoje mane. Tvoj program nece moci uopste da se pokrene ako DLL koji mu treba nedostaje. Ne mozes u toku rada programa da zamenis DLL koji je na pocetku ucitan da bi recimo promenio slicice ili tako nesto. Ima tu jos svasta, ali za pocetak je definitivno lakse da radis tako.
Tu je naravno i mnogo bolji nacin. Dinamicko povezivanje sa DLL-om ti omogucava da DLL ne moras (mozes ako hoces) da ucitas cim se program pokrene nego samo kada ti je potreban i da ga po potrebi unloadujes kada ti vise ne treba. Tako mozes na pocetku ako primetis da ti nedostaje neki DLL da prikazes korisniku poruku o gresci i da onemogucis u aplikaciji sve ono sto zahteva taj DLL, a ostalo korisnik i dalje moze da koristi.