DLL- негізгі код модулінің жинағы әрқайсысында белгілі сан қызметі және басқа да DLL- мен қосымша шақырулардың ретінде көрсетіледі. DLL- де әдеттегідей код жоқ, ал хабарлаудың сұрыптау циклдерінің өңдеуіне және терезе ашуға арналған. Файлдар негізгі кодпен копиляцияланып және сонымен қатар компоновкаланады. EXE файлындағыдай, бірақ компоновка кезінде /DLL кілтін көрсету керек.
Қосымша (немесе басқа DLL) функциясын шақыру үшін, DLL-да сақталған файл бейнесін ең бірінші процесті шақырған кеңістікте мекен- жайды анықтап алу керек. Бұл нақты байланыс арқылы немесе нақты емес байланыс арқылы DLL-ді қосқан кезде орындалады. Енді DLL-дің барлық қызметтері бұл процестің барлық ағысына тиімді. Ағыс DLL-ден қандай да бір қызметін шақырғанда ол өзінің параметірін ағыс санымен шығарып алып, осы стекте жергілікті өзгергішті орналастырады. Сонымен қатар, барлық кодамен белгіленген объектілер шақырылған ағынға жатады немесе DLL процесі ештенеге ие олмайды.
DLL файл бейнесін жобалауда процестің мекен- жай кеңістігін жасайды және сонымен қатар процесстер глоольді статистикалық өзгерістер көшірмесін жасайды.
EXE- және DLL- модульдерінің көрінбейтін байланыстары
Көрінбейтін байланыс (implicit linking)- бұл ең кең тараған әдіс. Орындалатын модуль (EXE) – DLL- ден айнымалыларды және қызметтерді импортқа шығарады, ал DLL- модулі орындалатын модульге экпорттайды. DLL сонымен қатар басқа DLL- дің қызметін импорттайды.
DLL модулін жасау
DLL- айнымалыларды экпортқа , қызметтері немесе С++ кластарын басқа модульдерге шығара алады. DLL-ді шығарарда алдымен тақырыптық файл жасалады, ол DLL-дің бастапқы коды бойынша барлық модульдерге қосылады. Сонымен қатар, оны өзіңнің DLL-іңмен бірге қою керек, өйткені басқа шығарушылар да өз кодтарымен өз модульдеріне қосыла алу үшін олар біздің қызметті немесе айнымалыларды импорттайды. Бірдей тақырыптық файл, DLL- ді жинау кезінде қолданылатын және басқада орындаушы модульдер қосымшаның көмегін жеңілдетеді.
DLL MYLIBAPI берілген файлдар қосылғанда тақырыптық файл қосылғанша _declspec(dllexport) деп көрінеді. Мұндай модификатор берілген айнымалылар, қызметтер немесе С++ класы экспортталады. Сонымен қатар MyLibFile1.cpp экспортқа шығаратын айнымалы немесе қызметте MYLIBAPI идентификаиоры қойылмайтынына көңіл бөлу керек. Ол бұл жерде қажет емес: тақырыптық файлды қарап шығып айнымалыларды және қызметтерді экспортқа шығатынын компилятор есте сақтайды.
Идентификатор MYLIBAPI extern- ді қосады. Модификатор extern компиляторға қызметтер мен айнымалылардың аттарын бұрмалауға мүмкіндік бермейді және олар орындалатын модульге қолдануға болатындай С-ға жазылғандай, С++ немесе басқа да бағдарламаның басқа тілінде жазылған. Бұл модификатормен С++ кодымен ғана пайдалануға болады, бірақ мүлде стандартты С кодындай емес.
Біз тақырыптық файлдың DLL файлының ішінде қалай қолданылуын көрдік.
Берелген файлда EXE модулі MYLIBAPI-ді белгілеп керегі жоқ: тақырыптық файлды қосқан кезде, сіз осы индикаторлардың қалай – DLLSPEC(DLLIMPORT), және берілген кодты EXE модуліне еңгізген кезде ол DLL-дан айнымалылар мен қызметтердің ипортталатынын компилятор түсінеді.
Достарыңызбен бөлісу: |