Разработка DLL (курсовая работа) (545376)
Текст из файла
Московский Энергетический Институт(технический университет)Курсовая работапо теме:«Разработка DLL».Выполнил: Пантелеев А. А-5-03.Проверил: Калитин Сергей Серафимович.23.04.2007г.Библиотеки динамической компоновкиВ этой главе мы расскажем вам о важнейшем механизме, лежащем в основе операционнойсистемы Windows - механизме библиотек динамической компоновки DLL. Если вы уже заметили,в Windows имеется много важнейших механизмов и систем, например, только что рассмотреннаясистема управления памятью, интерфейс графических устройств GDI, система динамическогообмена данными DDE, система управления шрифтами, интерфейсы для мультимедиа, системадинамической вставки и привязки объектов OLE, и так далее, и так почти до бесконечности.Однако будем терпеливыми, и постараемся сосредоточиться, так как вся операционная системаWindows и все ее драйверы (кроме виртуальных), а также другие расширения в некотором смыслеесть ни что иное, как набор библиотек динамической компоновки.
Редкое крупное приложениеWindows обходится без собственных библиотек динамической компоновки, и ни одноприложение не может обойтись без вызова функций, расположенных в таких библиотеках. Вчастности, все функции программного интерфейса Windows находятся именно в библиотекахдинамической компоновки DLL (Dynamic-Link Libraries ).Что же это за библиотеки и почему они имеют такое большое значение?3.1. Статическая и динамическая компоновкаВспомним старые добрые времена, когда операционная система MS-DOS и компьютеры спамятью 1 Мбайт удовлетворяли запросы подавляющего большинства пользователей.
Каксоздавался загрузочный файл программы для MS-DOS? Вы готовили исходный текст приложенияна своем любимом языке программирования (Си, Паскаль, Модула-2 и т. д.), затем транслировалиего для получения объектного модуля. После этого в дело включался редактор связей, которыйкомпоновал объектные модули, полученные в результате трансляции исходных текстов и модулииз библиотек объектных модулей, в один exe-файл. В процессе запуска файл программызагружался полностью в оперативную память и ему передавалось управление.Таким образом, редактор связей записывал в файл программы все модули, необходимые дляработы. Для обращения к внешним по отношению к программам модулям операционной системыMS-DOS и модулям BIOS использовался механизм программных прерываний.
В любой моментвремени в оперативной и постоянной памяти компьютера находился весь код, необходимый дляработы как запущенной программы, так и самой операционной системы MS-DOS.Если же программа была сложной и не помещалась целиком в 640 Кбайт памяти, на помощьприходили оверлеи, позволяющие загружать в оперативную память только те сегментыпрограммы, которые требовались для решения текущей задачи.В среде мультизадачной операционной системы, такой как Windows, OS/2 или UNIX, статическаякомпоновка неэффективна, так как приводит к неэкономному использованию очень дефицитногоресурса - оперативной памяти. Представьте себе, что в системе одновременно работают 5приложений, и все они вызывают такие функции, как sprintf, memcpy, strcmp и т.
д. Еслиприложения были собраны с использованием статической компоновки, в памяти будут находитсяодновременно 5 копий функции sprintf, 5 копий функции memcpy, и т. д (рис. 3.1). А ведьпрограммы могут использовать и более сложные функции, например, предназначенные дляработы с диалоговыми панелями или масштабируемыми шрифтами!Рис.
3.1. Вызов функций при использовании статической компоновкиОчевидно, использование оперативной памяти было бы намного эффективнее, если бы в памятинаходилось только по одной копии функций, а все работающие параллельно программы могли быих вызывать.Практически в любой многозадачной операционной системе для любого компьютераиспользуется именно такой способ обращения к функциям, нужным одновременно большомуколичеству работающих параллельно программ.При использовании динамической компоновки загрузочный код нескольких (или несколькихдесятков) функций объединяется в отдельные файлы, загружаемые в оперативную память вединственном экземпляре. Программы, работающие параллельно, вызывают функции,загруженные в память из файлов библиотек динамической компоновки, а не из файлов программ.Таким образом, используя механизм динамической компоновки, в загрузочном файле программыможно расположить только те функции, которые являются специфическими для даннойпрограммы.
Те же функции, которые нужны всем (или многим) программам, работающимпараллельно, можно вынести в отдельные файлы - библиотеки динамической компоновки, ихранить в памяти в единственном экземпляре (рис. 3.2). Эти файлы можно загружать в памятьтолько при необходимости, например, когда какая-нибудь программа захочет вызвать функцию,код которой расположен в библиотеке.Рис. 3.2. Вызов функции при использовании динамической компоновкиВ операционной системе Windows версии 3.1 файлы библиотек динамической компоновки (DLLбиблиотеки) имеют расширение имени dll, хотя можно использовать любое другое, например, exe.В первых версиях Windows DLL-библиотеки располагались в файлах с расширением имени exe.Возможно поэтому файлы krnl286.exe, krnl386.exe, gdi.exe и user.exe имеют расширение имениexe, а не dll, не смотря на то, что перечисленные выше файлы, составляющие ядро операционнойсистемы Windows, есть ни что иное, как DLL-библиотеки.Механизм динамической компоновки используется не только в системе Windows.
Более того, онбыл изобретен задолго до появления Windows. Например, в мультизадачныхмногопользовательских операционных системах VS1, VS2, MVS, VM, созданных длякомпьютеров IBM-370 и аналогичных (вспомните добрым словом ушедшую в прошлое серию ЕСЭВМ и операционные системы SVS, TKS, СВМ, МВС), код функций, нужных параллельноработающим программам, располагается в отдельных библиотеках и может загружаться принеобходимости в специально выделенную общую область памяти.
Операционная система OS/2также работает с DLL-библиотеками.3.2. DLL-библиотеки в операционной системе WindowsФормат DLL-библиотеки почти идентичен формату загрузочного модуля приложения Windows,однако вы не можете "запустить" DLL-библиотеку на выполнение, как обычное приложение. Иэто понятно, так как назначение DLL-библиотек другое - они служат хранилищем функций,вызываемых приложениями во время работы. Функции, расположенные в DLL-библиотеках,могут вызывать функции, которые находятся в других библиотеках (рис.
3.3).Рис. 3.3. Вызов функций из DLL-библиотекДля того чтобы вам были понятны отличия между приложением и DLL-библиотекой, уточнимтакие понятия, как задача (task ), копия приложения (instance ) и модуль (module ).Когда вы запускаете несколько копий одного приложения, Windows загружает в оперативнуюпамять только одну копию кода и ресурсов. Для каждой копии приложения создается отдельныйсегмент данных, стек и очередь сообщений (рис.
3.4).Рис. 3.4. Копии приложения и модуль приложенияЗадачу (task) можно рассматривать как совокупность виртуального процессора и ресурсов, такихкак стек, регистры процессора, глобальная память, очередь сообщений и т. д. В операционнойсистеме Windows имеется база данных запущенных задач, в которой хранится вся относящаяся кзадаче информация, например, идентификатор приложения, идентификатор модуля приложения ит.
д.Копия приложения (instance) является контекстом, в котором выполняется модуль приложения.Идентификатор копии приложения, который вы получаете через параметр hInstance функцииWinMain, является идентификатором сегмента данных DGROUP, используемого при выполнениипрограммного модуля.Модуль приложения (module) состоит из исполнимого кода и ресурсов. Внутри Windows есть базаданных модулей, в которой хранится такая информация, как ссылки на экспортируемые функции,расположение сегментов кода и сегментов, содержащих ресурсы. Так как модуль приложения неизменяется (сегменты кода и ресурсов не изменяются), все запущенные копии одного приложениямогут им пользоваться.DLL-библиотека также является модулем.
Она находится в памяти в единственном экземпляре,содержит сегменты кода и ресурсы, а так же один сегмент данных (рис. 3.5). Можно сказать, чтодля DLL-библиотеки создается одна копия (instance), состоящая только из сегмента данных, иодин модуль, состоящий из кода и ресурсов.Рис. 3.5. Структура DLL-библиотеки в памятиDLL-библиотека, в отличие от приложения, не имеет стека и очереди сообщения.Функции, расположенные в модуле DLL-библиотеки, выполняются в контексте вызвавшей ихзадачи.
При этом они пользуются стеком копии приложения, так как собственного стека в DLLбиблиотеке не предусмотрено.Тем не менее, функции, расположенные в DLL-библиотеке, пользуются сегментом данных,принадлежащей этой библиотеке, а не копии приложения. При этом возникают трудности,связанные с тем, что сегментный регистр SS, с помощью которого адресуется стек, указывает настек копии приложения, а регистр DS - на сегмент данных DLL-библиотеки. В обычныхприложениях Windows регистры SS и DS адресуют один и тот же автоматический сегментданных.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.