Кіріспе

Microsoft-тың Windows және OS/2 жүйелеріндегі ортақ кітапхана тұжырымдамасын іске асыруы, OS/2 және Windows-тың іске асырылуы. Динамикалық байланыс кітапханасы (DLL) – Microsoft Windows немесе OS/2 операциялық жүйесіндегі ортақ кітапхана. DLL кез келген комбинацияда орындалатын кодты (функцияларды), деректерді және ресурстарды қамтуы мүмкін.

Файл кеңейтулері

DLL файлы көбінесе .dll кеңейтімімен сақталады, бірақ кез келген файл кеңейтімі болуы мүмкін. Бағдарламашылар файлдың мазмұнын сипаттайтын файл кеңейтімін таңдауға болады, мысалы, ActiveX басқару элементтері үшін .ocx және ескі құрылғы драйверлері үшін .drv. Тек ресурстарды ғана қамтитын DLL – ресурстық DLL деп аталады. Мысалдарға белгішелер кітапханасы (кейде .icl кеңейтімімен) және .fon және .fot кеңейтімдері бар қаріптер кітапханасы жатады.

Файл пішімі

DLL файлдың пішімі орындалатын файлға (ә. ә. EXE) ұқсас, бірақ Windows-тың әртүрлі нұсқалары әртүрлі форматтарды қолданады. 32 биттік және 64 биттік Windows нұсқалары Portable Executable (PE) форматын қолданады, ал 16 биттік Windows нұсқалары New Executable (NE) форматын қолданады. DLL мен EXE арасындағы басты айырмашылық – DLL-ді тікелей іске қосуға болмайды, себебі операциялық жүйе орындауды бастау үшін кіріс нүктесін талап етеді. Windows пайдалы программаны (RUNDLL.EXE/RUNDLL32.EXE) DLL-де көрсетілген функцияны орындау үшін ұсынады. Олардың форматы бірдей болғандықтан, EXE-ні DLL ретінде пайдалануға болады. Кодты пайдаланушы EXE-ні DLL-ді жүктеу механизмі арқылы жүктей алады.

Өмірбаян

Microsoft Windows-тың алғашқы нұсқалары бағдарламаларды бір адрестік кеңістікте бірге іске қосты. Әрбір бағдарлама процессорды (CPU) басқа бағдарламаларға беру арқылы ынтымақтастықпен жұмыс істеуге тиіс болды, соның арқасында графикалық пайдаланушы интерфейсі (GUI) көп тапсырмалы жұмыс істеп, мүмкіндігінше жылдам жауап бере алатын болды. Операциялық жүйе деңгейіндегі барлық операцияларды негізгі операциялық жүйе – MS DOS қамтамасыз етті. Жоғары деңгейдегі барлық қызметтер Windows кітапханалары – «Динамикалық сілтеме кітапханасы» арқылы ұсынылды. Сурет салу API, Графикалық құрылғы интерфейсі (GDI) GDI.EXE деп аталатын DLL-де іске асырылды, ал пайдаланушы интерфейсі USER.EXE-де. DOS-тың үстіндегі бұл қосымша қабаттар Windows-ты бір мегабайттан аз жадысы бар машинада жұмыс істеуге мүмкіндік беру үшін ғана емес, сонымен қатар бағдарламалардың бір-бірімен ынтымақтастықпен жұмыс істеуі үшін барлық Windows бағдарламаларында ортақ пайдаланылуы керек болды. GDI-дегі код сызу командаларын нақты құрылғыларда орындалатын операцияларға аудару қажет болды. Дисплейде кадр буферіндегі пиксельдерді басқару қажет болды. Принтерге сурет салу кезінде API шақырулары принтерге жіберілетін сұрауларға айналдырылуы керек еді. Шешілген құрылғылар жинағына (мысалы, Түсті Графикалық Адаптер дисплейі, HP LaserJet принтерінің команда тілі) тікелей қолдау көрсету мүмкін болғанымен, Microsoft басқа тәсілді таңдады. GDI әртүрлі шығыс құрылғыларымен жұмыс істеу үшін «құрылғы драйверлері» деп аталатын кодтың әртүрлі бөліктерін жүктеу арқылы жұмыс істейді. GDI-ге әртүрлі құрылғы драйверлерін жүктеуге мүмкіндік беретін осы архитектуралық тұжырымдама Windows қабықшасына әртүрлі Windows бағдарламаларын жүктеуге және осы бағдарламаларға ортақ USER және GDI кітапханаларынан API шақыруларын орындауға мүмкіндік берді. Бұл – «динамикалық байланыс» ұғымы. Дәстүрлі, ортақ емес статикалық кітапханада кодтың бөлімдері орындалатын файл құрылған кезде шақыру бағдарламасына қосылады; егер екі бағдарлама бірдей процедураны шақыратын болса, ол процедура екі бағдарламаның байланыс кезеңінде екеуіне де енгізіледі. Динамикалық байланыс кезінде ортақ код бір бөлек файлға орналастырылады. Бұл файлды шақыратын бағдарламалар онымен жұмыс уақытында байланысады, ал операциялық жүйе (немесе Windows-тың алғашқы нұсқаларында – ОЖ кеңейтуі) байланыстыруды жүзеге асырады. Windows-тың алғашқы нұсқалары үшін (1.0-ден 3.11-ге дейін) DLL-лер бүкіл GUI-дің негізін құрады. Сондықтан дисплей драйверлері – бұл DRV кеңейтуі бар DLL-дер, олар бірыңғай құрылғы драйверінің интерфейсі (DDI) арқылы сызу API-нің бейімделген нұсқасын ұсынады, ал Сурет салу (GDI) және GUI (USER) API-лері – GDI және USER жүйелік DLL-дері экспорттайтын функция шақырулары, EXE кеңейтуі бар. Операциялық жүйені динамикалық түрде жүктелетін кітапханалар жинағынан құру тұжырымы – Windows-тың негізгі ұғымы, ол DLL-дердің ортақ кітапханалардың стандартты артықшылықтарын, мысалы, модулділікті қамтамасыз етеді. Модулділік бірнеше қолданбалармен ортақ пайдаланылатын бір DLL-дегі код пен деректерге өзгерістер енгізуге мүмкіндік береді, бірақ қолданбалардың өзіне ешқандай өзгеріс енгізілмейді. Модулділіктің тағы бір артықшылығы – плагиндер үшін жалпы интерфейстерді пайдалану. Бір интерфейс әзірленеді, ол ескі және жаңа модульдерді қолданбаны өзгертпей, жұмыс уақытында қолданыстағы қолданбаларға біріктіруге мүмкіндік береді. Динамикалық кеңейтудің бұл тұжырымы ActiveX негізін құрайтын Компоненттік Объект Моделімен шектеледі. Windows 1.x, 2.x және 3.x-те барлық Windows қолданбалары бірдей адрестік кеңістікті және бірдей жадыны бөлісті. DLL бұл адрестік кеңістікке тек бір рет жүктеледі; содан кейін кітапхананы пайдаланатын барлық бағдарламалар оған кіреді. Кітапхананың деректері барлық бағдарламалармен ортақ пайдаланылды. Бұл процестер арасындағы байланыс үшін жанама тәсіл ретінде пайдаланылуы мүмкін немесе кездейсоқ түрде әртүрлі бағдарламаларды бұзуы мүмкін. Windows 95-те 32 биттік кітапханалар енгізілгеннен кейін, әрбір процесс өзінің жеке адрестік кеңістігінде жұмыс істеді. DLL коды ортақ болса да, деректер жеке болып қалады, егер кітапханада ортақ деректер нақты сұратылмаса. Алайда, Windows 95, Windows 98 және Windows Me-нің үлкен бөлігі 16 биттік кітапханалардан құрылды, бұл Pentium Pro микропроцессордың өнімділігін шектеді және, ақырында, Windows-тың DOS негізіндегі нұсқаларының тұрақтылығы мен кеңейтілу мүмкіндігін шектеді.

Шектеулер

DLL технологиясы Windows архитектурасының негізгі құрамы болғанымен, ол кемшіліктерінен хабардар.

Ортақ жады кеңістігі

DLL-дің орындалатын коды шақырушы процесс жады кеңістігінде және сол процесске берілген құқықтармен жұмыс істейді, яғни оларды пайдалануда аз шығындар болады, бірақ DLL-де қандай да бір қателік болса, шақырушы бағдарлама қорғалмайды.

Жаңартылуы

DLL технологиясы қолданбаны тұтынушы компоненттерді қайта компиляциялау немесе қайта байланыстыру қажеттілігінсіз өзгертуге мүмкіндік береді. DLL жаңа DLL нұсқасын пайдалану үшін келесі қолданба іске қосылғанда ауыстырылуы мүмкін. Дұрыс жұмыс істеуі үшін DLL өзгерістері кері үйлесімділікті сақтауы керек. Операциялық жүйе де DLL арқылы қолданбаларға қолжетімділік арқылы жаңартылуы мүмкін. Келесі рет қолданбалар іске қосылғанда жаңа жүйелік DLL-дерді пайдалану үшін жүйелік DLL-дерді ауыстыруға болады.

Жадты басқару

Windows API-де DLL файлдары бөлімдерге бөлінеді. Әрбір бөлімнің өзіне тән атрибуттары бар, мысалы, жазуға болатын немесе тек оқуға арналған, орындалатын (код үшін) немесе орындалмайтын (деректер үшін) және т.б. DLL-дегі код әдетте DLL-ді пайдаланатын барлық процестер арасында ортақ пайдаланылады; яғни, олар физикалық жадыда бір орынды иеленеді және беттік файлда орын алмайды. Windows өзінің DLL-дері үшін жағдайға тәуелсіз кодты қолданбайды; керісінше, код жүктеліп жатқанда, оның барлық кіру нүктелерінің мекенжайлары DLL-ді жүктейтін алғашқы процестің жад кеңістігінде бос орындарға бекітіліп, қайта орналастырылады. Windows-тың ескі нұсқаларында, барлық жұмыс істеп тұрған процестер бір ортақ адрес кеңістігін пайдаланғандықтан, DLL кодын бір рет жүктеу барлық процестер үшін жеткілікті болатын. Бірақ, Windows-тың әр бағдарлама үшін жеке адрес кеңістіктерін пайдаланатын жаңа нұсқаларында, DLL-дің бір көшірмесін бірнеше бағдарламада қолдану тек қана егер әрбір бағдарламада DLL кодын орналастыру үшін бірдей виртуалды мекенжайлар бос болған жағдайда ғана мүмкін. Егер кейбір бағдарламаларда (немесе олардың бұрыннан жүктелген DLL-дерінің комбинациясында) бұл мекенжайлар бос болмаса, онда DLL кодын басқа мекенжайларға қайта орналастырылған кіру нүктелерін пайдаланып, қосымша физикалық көшірмесін жасау қажет. Егер код бөлімі алған физикалық жад босатылса, оның мазмұны жойылады және қажет болған жағдайда DLL файлынан тікелей қайта жүктеледі. Код бөлімдерінен айырмашылығы, DLL-дің дерек бөлімдері көбінесе жеке болып табылады; яғни, DLL-ді пайдаланатын әрбір процесс DLL-дің барлық деректерінің өз көшірмесін иеленеді. Опция бойынша, дерек бөлімдерін ортақ пайдалануға болады, бұл ортақ жад аймағы арқылы процестер арасында байланыс құруға мүмкіндік береді. Алайда, пайдаланушы шектеулері ортақ DLL жадының пайдаланылуына қатысты қолданылмайтындықтан, бұл қауіпсіздікке қатысты кемшілік тудырады; атап айтқанда, бір процесс ортақ деректерді бұзуы мүмкін, бұл басқа барлық ортақ процестердің дұрыс жұмыс істемеуіне әкелуі мүмкін. Мысалы, қонақ тіркелгісімен жұмыс істейтін процесс, артықшылықты тіркелгісімен жұмыс істейтін басқа процесске зиян келтіруі мүмкін. Сондықтан DLL-дерде ортақ бөлімдерді пайдаланудан аулақ болу маңызды. Егер DLL белгілі бір атқарушы пакерлермен (мысалы, UPX) сығылса, оның барлық код бөлімдері оқуға және жазуға рұқсат етілген деп белгіленеді және ортақ болмайды. Кодты оқуға және жазуға рұқсат етілген бөлімдер, жеке дерек бөлімдері сияқты, әрбір процесске жеке болып табылады. Осылайша, егер олар бірнеше бағдарламамен бір уақытта пайдаланылуы тиіс болса, ортақ дерек бөлімдері бар DLL-дерді сығылмаған дұрыс, өйткені әр бағдарлама инстанциясы DLL-дің өз көшірмесін алып жүруі керек, бұл жадты көп пайдалануға әкеледі.

Кітапханаларды импорттау

Статикалық кітапханалар сияқты, DLL үшін импорт кітапханалары lib файл кеңейтімімен белгіленеді. Мысалы, Windows-тың негізгі функциялары үшін, яғни файл жасау және жад басқару сияқты, негізгі динамикалық кітапханасы kernel32.dll, kernel32.lib арқылы байланыстырылады. Импорт кітапханасын нағыз статикалық кітапханадан ажыратудың ең оңай жолы – олардың мөлшері: импорт кітапханасы әлдеқайда кішкентай, себебі ол тек сілтеме жасау кезінде өңделетін нақты DLL-ге сілтеме беретін символдарды ғана қамтиды. Дегенмен, екеуі де Unix ar форматындағы файлдар. Динамикалық кітапханаларға сілтеме жасау әдетте орындалатын файлды құру немесе байланыстыру кезінде импорт кітапханасына сілтеме жасау арқылы жүзеге асырылады. Содан кейін құрылған орындалатын файлда барлық DLL функцияларын шақыруларға сілтеме жасайтын импорттық адрестік кесте (IAT) болады (әрбір сілтеме жасалған DLL функциясы IAT-да өз жазбасын қамтиды). Орындау кезінде IAT жеке жүктелген DLL-дегі функцияға тікелей сілтейтін тиісті адрестермен толтырылады. Cygwin/MSYS және MinGW-де импорт кітапханаларына әдетте dll.a кеңейтімі беріледі, бұл Windows DLL кеңейтімі мен Unix ar кеңейтімін біріктіреді. Файл форматы ұқсас, бірақ импортты белгілеу үшін қолданылатын символдар әртүрлі (head foo dll vs IMPORT DESCRIPTOR foo). Оның GNU Binutils құралдар жинағы импорт кітапханаларын жасап, оларға сілтеме жасай алғанымен, DLL-ге тікелей сілтеме жасау жылдамырақ. MinGW-дегі genlib деп аталатын тәжірибелік құрал MSVC стиліндегі символдары бар импорттық кітапханаларды жасау үшін қолданылуы мүмкін.

Символдарды ажырату және бекіту

Әрбір DLL экспорттайтын функция сандық тәртіп нөмірімен және қажет болса атаумен анықталады. Сол сияқты, функцияларды DLL-ден тәртіп нөмірі немесе атау бойынша импорттауға болады. Тәртіп нөмірі DLL экспорттау адресі тізіміндегі функцияның адрес сілтемесінің орнын көрсетеді. Ішкі функциялар көбінесе тек тәртіп нөмірімен экспортталады. Көптеген Windows API функциялары үшін тек атаулары Windows-тың әртүрлі нұсқаларында сақталады; тәртіп нөмірлері өзгеруі мүмкін. Сондықтан, Windows API функцияларын олардың тәртіп нөмірлері бойынша сенімді түрде импорттау мүмкін емес. Функцияларды тәртіп нөмірі бойынша импорттау, оларды атау бойынша импорттауға қарағанда сәл жақсы өнімділік береді: DLL-дің экспорттау тізімдері атау бойынша реттелген, сондықтан функцияны табу үшін екілік іздеуді пайдалануға болады. Содан кейін табылған атау индексі Экспорттық тәртіп тізімінде тәртіп нөмірін іздеу үшін қолданылады. 16 биттік Windows-та атау тізімі реттелмеген, сондықтан атау іздеудің қосымша жүктемесі айқынрақ байқалады. Сонымен қатар, атқарылатын файлды DLL-дің нақты нұсқасына байланыстыру мүмкін, яғни импортталған функциялардың мекенжайларын компиляция кезінде анықтау. Байланысты импорт үшін компилятор импорт байланыстырылған DLL-дің уақыт белгісі мен бақылау сомасын сақтайды. Орындау кезінде Windows кітапхананың сол нұсқасы қолданылып жатқанын тексереді, егер солай болса, Windows импортты өңдеуден өткізбейді. Әйтпесе, егер кітапхана байланыстырылғаннан өзгеше болса, Windows импортты әдеттегідей өңдейді. Байланыстырылған атқарылатын файлдар, егер олар құрастырылған ортада орындалса, біршама жылдам жүктеледі, ал басқа ортада орындалса, дәл сол уақытта жүктеледі, сондықтан импортты байланыстырудың зияны жоқ. Мысалы, барлық стандартты Windows қолданбалары олардың тиісті Windows нұсқасының жүйелік DLL-деріне байланыстырылған. Қолданбаның импортты мақсатты ортамен байланыстыруға ыңғайлы мүмкіндік – қолданбаны орнату кезінде. Бұл кітапханаларды келесі операциялық жүйе жаңартуына дейін «байланыстырып» ұстайды. Алайда, ол атқарылатын файлдың бақылау сомасын өзгертеді, сондықтан бұл қол қойылған бағдарламалармен немесе файл нұсқаларын басқару үшін бақылау сомаларын (мысалы, MD5 бақылау сомаларын) пайдаланатын конфигурация басқару құралымен басқарылатын бағдарламалармен жасалмайды. Windows-тың жаңа нұсқалары (қауіпсіздік себептерімен) әрбір жүктелген кітапхана үшін белгілі бір мекенжайлардан бас тартылғандықтан, атқарылатын файлды байланыстыру мүмкіндігі мен құндылығы азайып барады.

Ашық орындау уақытымен байланыстыру

DLL файлдары орындалу кезінде тікелей жүктелуі мүмкін, Microsoft компаниясы бұл процесті «орындалу уақытында динамикалық байланыс» деп атайды және оны LoadLibrary (немесе LoadLibraryEx) API функциясы арқылы жүзеге асыруға болады. GetProcAddress API функциясы экспортталған символдарды аты бойынша табу үшін, ал FreeLibrary – DLL-ді босату үшін қолданылады. Бұл функциялар POSIX стандартты API-дегі dlopen, dlsym және dlclose функцияларымен салыстырылады. Анық орындалу уақытында байланыс процедурасы функцияларға сілтемелерді қолдайтын кез келген тілде бірдей болады, себебі ол тіл құрылымдарына емес, Windows API-ге негізделген.

Жүктіліктің кешіктірілуі

Көбінесе, DLL импорттау кітапханасына байланыстырылған қосымша DLL табылмаса іске қосылмайды, себебі Windows қосымшаға қажетті барлық DLL файлдарын таппаса, оны іске қоспайды. Алайда, динамикалық кітапхананы кешіктіріп жүктеу үшін импорт кітапханасына байланыстыру мүмкін. Бұл жағдайда, операциялық жүйе қосымша іске қосылғанда DLL-ді іздеуге немесе жүктеуге тырыспайды; керісінше, линкер қосымшаға сілтеме енгізеді, ол DLL-дің функцияларының бірі шақырылғанда LoadLibrary және GetProcAddress арқылы DLL-ді іздеуге және жүктеуге тырысады. Егер DLL табылмаса немесе жүктелмесе, немесе шақырылған функция болмаса, қосымша қателік тудырады, оны ұстап алып, тиісті түрде өңдеуге болады. Егер қосымша қателікті өңдемесе, ол операциялық жүйеге жетеді, ол бағдарламаны қате хабарламасымен тоқтатады. Кешіктірілген жүктеу механизмі сондай-ақ хабарландыру құралдарын қамтамасыз етеді, бұл қосымшаға DLL жүктелгенде және/немесе кез келген DLL функциясы шақырылғанда қосымша өңдеу немесе қателерді өңдеуді жүзеге асыруға мүмкіндік береді.

Дельфи

Бастапқы файлда бағдарламаның орнына кілт сөз кітапханасы қолданылады. Файлдың соңында экспортталатын функциялар экспорттау бөлімінде тізімделеді. Delphi DLL-дерден функцияларды импорттау үшін LIB файлдарын қажет етпейді; DLL-ге байланысу үшін функция жариялануында DLL атауын көрсету үшін "сыртқы" кілт сөзі қолданылады, одан кейін символдың (аты басқа болса) немесе индексін анықтау үшін индекс нөмірі келтіріледі.

Microsoft Visual Basic бағдарламасы

Visual Basic (VB) бағдарламасында тек орындалу кезінде байланыстыру қолдау көрсетіледі; бірақ LoadLibrary және GetProcAddress API функцияларын пайдаланумен қатар, импортталған функцияларды жариялауға да рұқсат беріледі. DLL функцияларын жариялау арқылы импорттағанда, егер DLL файлы табылмаса, VB орындалу кезінде қате шығарады. Бағдарламашы осы қатені ұстап алып, тиісінше өңдей алады. VB-де DLL құрастырғанда, IDE тек ActiveX DLL құруға мүмкіндік береді, алайда пайдаланушыға DEF файлын қосуға рұқсат беру үшін әдістер жасалған. Бұл файл әрбір экспортталған функцияның реттік нөмірін және атын анықтайды. Осы арқылы пайдаланушы Visual Basic (6-шы нұсқасы және одан төмен) қолданып, "Declare" операторы арқылы сілтеме жасалатын стандартты Windows DLL құруға мүмкіндік алады.

C және C++

Microsoft Visual C++ (MSVC) стандартты C++-қа бірнеше кеңейтулер ұсынады, олар функцияларды тікелей C++ кодында импортталған немесе экспортталған ретінде белгілеуге мүмкіндік береді; оларды басқа Windows C және C++ компиляторлары, соның ішінде Windows GCC нұсқалары қабылдады. Бұл кеңейтулер функция жариялануынан бұрын `declspec` атрибутын қолданады. C функцияларына C++-тан қол жеткізгенде, C++ кодында C байланысын қолдану керектігін компиляторға хабарлау үшін оларды `extern "C"` деп жариялау қажет. `declspec` атрибуттарын пайдаланып импортталған немесе экспортталған функцияларды көрсетуден басқа, оларды жобада қолданылатын DEF файлының IMPORT немесе EXPORTS бөлімінде тізімдеуге болады. DEF файлын компилятор емес, байланыстырушы (linker) өңдейді, сондықтан ол C++-қа ғана тән емес. DLL жинау DLL және LIB файлдарын шығарады. LIB файлы (импорт кітапханасы) компиляция кезінде DLL-ге байланысу үшін қолданылады; ол орындалу кезінде байланысу үшін қажет емес. Егер DLL компоненттік объектілер моделінің (COM) сервері болмаса, DLL файлы PATH ортасы айнымалысында көрсетілген каталогтардың бірінде, әдепкі жүйелік каталогта немесе оны пайдаланатын бағдарламамен бірге орналастырылуы керек. COM серверінің DLL-дері `regsvr32.exe` арқылы тіркеледі, ол DLL-дің орналасқан жерін және оның жаһандық бірегей идентификаторын (GUID) тізілімге орналастырады. Бағдарламалар DLL-ді оның GUID-ін тізілімнен іздеу арқылы орнын табу үшін немесе COM объектісінің данасын (instance) оның сынып идентификаторы мен интерфейс идентификаторын пайдалану арқылы жанама түрде құру үшін пайдалана алады.

Ашық орындау уақытында байланыстыруды пайдалану

Келесі мысалдар Windows API-ге тілдік ерекшеліктермен байланысты жүктеу және байланыстыру мүмкіндіктерін қалай пайдалану керектігін көрсетеді. Барлық төрт үлгі DLL алдын ала жүктеу шабуылдарына осал екенін ескеріңіз, себебі example.dll автордың күтпеген жерден (нақты көрсетілмесе) анықталуы мүмкін. Бұл қолданба каталогы жүйелік кітапханалардың орналасқан жерінен бұрын қарастырылатындықтан, сондай-ақ HKEY LOCAL MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode немесе HKEY LOCAL MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\CWDIllegalInDLLSearch тіркелмелері болмаса, ағымдағы жұмыс каталогы жүйелік кітапханалар каталогтарынан бұрын қаралады. Осылайша, кітапхананың қауіпті нұсқасына қол жеткізуге болады. Microsoft-тың кітапханаларды қауіпсіз жүктеу бойынша ұсынымдарын қараңыз: DLL іздеу жолынан қолданба каталогы мен ағымдағы жұмыс каталогын жою үшін пайдалану керек, немесе DLL іздеу жолынан ағымдағы жұмыс каталогын жою үшін пайдалану керек.

Компоненттік нысанның моделі

Компоненттік объект моделі (COM) DLL және EXE файлдарындағы объектілерді жүктеу үшін екілік стандартты анықтайды. Ол осы файлдарды іздеу және нұсқаларын басқару механизмдерін, сондай-ақ интерфейстің тілден тәуелсіз және машинамен оқылатын сипаттамасын қамтамасыз етеді. COM объектілерін DLL-де жүктеу жеңілдетілген және оларға клиенттік процесспен ресурстарды бөлісуге мүмкіндік береді. Бұл COM объектілеріне Visual Basic және ASP сияқты қарапайым графикалық интерфейске қуатты серверлік бөліктерді енгізуге мүмкіндік береді. Оларды скрипт тілдерінен де бағдарламалауға болады.

DLL-ді ұрлау

DLL-ді ұрлау, DLL-ді жалғандау, DLL-ді алдын ала жүктеу немесе бинарлық орналастыру деп белгілі бір осалдыққа байланысты, көптеген бағдарламалар осы бағдарламалар ашатын дерек файлы орналасқан қалтадағы қауіпті DLL-ді жүктеп, іске қосады. Бұл осалдықты 2000 жылы Георгий Гунинский тапқан. 2010 жылдың тамызында ACROS Security оны қайта ашқаннан кейін және жүздеген бағдарламалардың осал екені анықталғаннан кейін ол бүкіл әлемге танымал болды. Пайдаланушы жаза алатын қалталардан, мысалы, "Жүктемелер" немесе "Уақытша" каталогтарынан іске қосылатын бағдарламалар осы осалдыққа бейім.