«Программалау 1» ПӘнінің ОҚУ-Әдістемелік кешені



бет24/36
Дата28.10.2022
өлшемі192,98 Kb.
#45955
1   ...   20   21   22   23   24   25   26   27   ...   36

Экспорт деген не?


Егер айнымалының алдында қызметтің прототипі болып немесе С++ класымен модификатор -_declspec(dllexport), компилятор Microsoft C/C++ соңғы obj файлға қосымша ақпарат кіргізеді. Ол obj файлдардан DLL жинағын жинағанда керек болады. Мұндай ақпаратты көріп компоновщик DLL-дан экспортталатын идентификатор тізімімен LIB файлын жасайды. Бұл LIB файлы әрбір EXE модулін жинаған сияқты идентификаторларға сүйенеді. Компоновщик сонымен қатар соңғы DLL файл таблицасына экспортқа шығатын идентификаторларды- экпорт өлімі онда экпортталатын идентификаторлар қызметінің, айнымалылары мен кластар тізімі сақталады. Сол жерге DLL модулінің әрбір идентификаторы виртуалды мекен-жайын сыйдырады(relative virtual address, RVA).


EXE модулін құру


Міне EXE модулінің шығатын кодасының мысалы:


// Модуль: MyExeFilel.cpp #include
//Мәліметтер құрылымын, идентификаторларды, кызметтерді және айнымалыларды экспорттауды косамыз
#include “MyLib\MyLib.h”
….
Int WINAPI WinMain(HINSTANCE hinstExe,HINSTANCE,LPTSTR
pszCmdLine,int){ int nLeft=10, nRight=25; TCHAR sz[100];
Wsprintf(sz, TEXT(“%d+ %d =%d ”), nLeft, nRight, Add(nLeft, nRight));
MessageBox(NULL,sz,TEXT(“Calculation”), MB_OK);
Wsprintf(sz, TEXT(“The result from the last Add is: %d”), g_nResult); MessageBox(NULL, sz, TEXT(“Last Result”), MB_OK);
Return (0);
}
EXE модулінің берілген кодасымен файл ашарда DLL-дің тақырыптық файлын қосу керек, өйткені импортталатын индентификаторлар белгісіз болып шығуы мүмкін. Компилятор қателер туралы көп сақтандырады.
MYLIBAPI EXE модулінің берілген файлында DLL-дің тақырыптық файлына дейін көрсетілмейді, сондықтан компиляция кезінде жоғарыда берілген кода арқылы MYLIBAPI тақырыптық файл MyLib.h мынадай болып белгіленеді - _declspec(dllimport) осындай модификаторды кездестіріп айнымалы атының, қызметтер немесе С++ класының алдында компилятор түсінеді, бұл берілген идентификатор DLL модулі арқылы импортталады.
Ары қарай барлық OBJ модульдерін EXE модуліне компоновщик жинайды. Бұл үшін ол қандай DLL-інде импортталатын идентификаторлар сақталады, олар кодада белгіленген. Ол бұл жайында
LIB файлынан оған берілетін ақпаратты алады (онда экспортталатын DLL идентификаторларының реті берілген).




Достарыңызбен бөлісу:
1   ...   20   21   22   23   24   25   26   27   ...   36




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет