Dynamic Link LibraryДоброго времени суток, уважаемые подписчики. В начале хочу извиниться за свою пропажу, к сожалению, периодически это может повторяться.. Сегодня, как Вы могли заметить из названия, речь пойдёт о динамических библиотеках, обычно носящих расширение dll. Наверняка тем, кто писали программы под DOS, очень часто требовались одни и те же процедуры при написании абсолютно разных программ. Они наверняка были записаны в отдельный файл (или скомпилированы в obj) и добавлялись таким образом в каждую программу. В DOS - е, где одновременно могла выполняться лишь одна программа, это было достаточно удобно, однако при приходе многозадачности оказалось не совсем разумным, что несколько копий одной и той же процедуры находятся в памяти одновременно. dll же сделаны так, что они загружены в память лишь когда они используются. Кстати, все процедуры, которые мы использовали в наших программах как раз находятся в dll файлах! После написание программы, которая использует процедуры из dll нужно как-либо обозначить название dll и, так как трудно предугадать, куда будет загружена dll , то нужно правильно узнать адреса процедур. Этот процесс называется связывание (linking). Во всех прошлых программах мы возлагали всю ответственность связывания на компилятор (точнее на link32.exe = связыватель32). Такое связывание называется неявным, при этом управление загрузкой/выгрузкой dll теряет гибкость. Так же возможно явное связывание, но оно относится к программе вызывателю библиотеки и о нём в следующем уроке, а сегодня мы поговорим о том, как можно самому при помощи ассемблера сделать полноценную библиотеку. В принципе, динамическая библиотека мало чем отличается от обычной программы, но некоторые особенности конечно есть: Итак, наша первая библиотека, DLL1.asm:
Ничего нового, я думаю, в процедурах нет, поэтому не будем их отдельно разбирать. Компиляция производится следующим образом, нам понадобится два файла, во первых DLL1.bat, во вторых DLL1.lnk, следующего содержания: Использование dll мало чем отличается от использование kernel32 или user32, которые мы использовали даже в самой первой нашей программе, так как помимо файла .dll компилятор создаёт также .lib (не кажется ли знакомым?), а при помощи .lib можно создать .inc, который нам и нужен. Можно конечно делать это ручками, но человек ленив, и я не исключение, поэтому я написал програмку, которая создаёт .inc файл из .lib. Думаю, что она может пригодиться всем. На сегодня это всё. В следующем уроке рассмотрим связывание подробней. Если есть какие вопросы, пишите, обязательно отвечу. Пишите, Dark_Lord@RusFAQ.ru, Dark_Lord@land.ru. |