Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » Разработка DLL (курсовая работа)

Разработка DLL (курсовая работа), страница 3

PDF-файл Разработка DLL (курсовая работа), страница 3 Операционные системы (5594): Курсовая работа - 8 семестрРазработка DLL (курсовая работа): Операционные системы - PDF, страница 3 (5594) - СтудИзба2015-08-21СтудИзба

Описание файла

PDF-файл из архива "Разработка DLL (курсовая работа)", который расположен в категории "". Всё это находится в предмете "операционные системы" из 8 семестр, которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "операционные системы" в общих файлах.

Просмотр PDF-файла онлайн

Текст 3 страницы из PDF

Вызываяфункции из DLL-библиотеки, приложение передает им в качестве, например, первого параметра,этот указатель.Перед завершением работы приложение должно вызвать созданную вами функцию,освобождающую выделенную структуру данных.

Она может называться, например, LibUnregister.Если функция LibMain заказывает блоки памяти из глобальной области данных, следуетиспользовать флаг GMEM_SHARE. Такие блоки памяти будут принадлежать создавшей их DLLбиблиотеке. Освобождение заказанных глобальных блоков памяти можно выполнить в функцииWEP, получающей управление при выгрузке DLL-библиотеки из памяти.Приведем пример простейшего варианта функции LibMain:int FAR PASCAL LibMain(HINSTANCE hInstance,WORD wDataSegment, WORD wHeapSize,LPSTR lpszCmdLine){if(wHeapSize != 0)UnlockData(0);return 1;}Эта функция проверяет размер локальной области данных, и если эта область данных существует,она расфиксируется при помощи макрокоманды UnlockData. После этого возвращается признакуспешной инициализации.Функция WEPDLL-библиотека в любой момент времени может быть выгружена из памяти.

В этом случаеWindows перед выгрузкой вызывает функцию WEP . Эта функция, как и функция LibMain,вызывается только один раз. Она может быть использована для уничтожения структур данных иосвобождения блоков памяти, заказанных при инициализации DLL-библиотеки.Приведем прототип функции WEP (при использовании системы разработки Borland Turbo C++ forWindows):int FAR PASCAL WEP(int bSystemExit);Параметр bSystemExit может принимать значения WEP_FREE_DLL и WEP_SYSTEM_EXIT .

Этотпараметр указывает причину выгрузки DLL-библиотеки из памяти. В первом случае выгрузкавыполняется потому, что либо функциями библиотеки не пользуется ни одно приложение, либоодно из приложений выдало запрос на выгрузку. Если же параметр имеет значениеWEP_SYSTEM_EXIT, выгрузка библиотеки происходит из-за завершения работы операционнойсистемы Windows.Функция WEP должна всегда возвращать значение 1.Вам не обязательно самостоятельно определять функцию WEP. Так же как и функция LibEntry,функция WEP добавляется в DLL-библиотеку транслятором. Вы, однако, можете определитьсобственную функцию WEP, если перед выгрузкой DLL-библиотеки требуется освободитьзаказанные ранее блоки памяти.Приведем пример простейшей функции WEP:int FAR PASCAL WEP(int bSystemExit){return 1;}В операционной системе Windows версии 3.0 на использование функции WEP накладывалисьсерьезные ограничения, которые делали ее практически бесполезной.

Например, размер стека,используемого для работы этой функции, составлял всего 256 байт, чего совершеннонедостаточно для вызова функций программного интерфейса Windows. Есть и другие проблемы,однако мы не будем их затрагивать из-за того, что версия 3.0 уже сильно устарела, а в версии 3.1все эти ограничения сняты.

Поэтому вы можете использовать функцию WEP для любыхпроцедур, в частности, для освобождения памяти, полученной при инициализации в функцииLibMain.Экспортируемые функцииКроме функций LibMain и WEP в DLL-библиотеке могут быть определены и другие функции (какмы уже говорили, существуют DLL-библиотеки, состоящие из одних ресурсов). Это могут бытьэкспортируемые и неэкспортируемые функции.Экспортируемые функции доступны для вызова приложениям Windows.

Неэкспортируемыеявляются локальными для DLL-библиотеки, они доступны только для функций библиотеки.Самый простой способ сделать функцию экспортируемой в системе разработки Borland TurboC++ for Windows - указать в ее определении ключевое слово _export. Мы использовали этотспособ при определении функции окна. Для экспортируемой функции создается специальныйпролог, необходимый для правильной загрузки сегментного регистра DS.Есть и другой способ - можно перечислить все экспортируемые функции в файле определениямодуля при помощи оператора EXPORTS :EXPORTSDrawBitmap @4ShowAllHideAllGetMyPool @8FreeMyPool @9В приведенном выше примере в разделе EXPORTS перечислены имена несколькихэкспортируемых функций.

Около некоторых имен после символа "@" указаны порядковыеномера соответствующих функций в DLL-библиотеке.Если вы не укажите порядковые номера экспортируемых функций, при компоновке загрузочногофайла DLL-библиотеки редактор связи создаст свою собственную нумерацию, которая можетизменяться при внесении изменений в исходные тексты функций и последующей повторнойкомпоновке. Плохо это или хорошо?Для ответа на этот вопрос следует знать, что ссылка на экспортируемую функцию можетвыполняться двумя различными способами - по имени функции и по ее порядковому номеру.Если функция вызывается по имени, ее порядковый номер не имеет значения.

Однако вызовфункции по порядковому номеру выполняется быстрее, поэтому использование порядковыхномеров предпочтительнее.Если при помощи файла определения модуля DLL-библиотеки вы задаете фиксированноераспределение порядковых номеров экспортируемых функций, при внесении изменений висходные тексты DLL-библиотеки это распределение не изменится. В этом случае всеприложения, ссылающиеся на функции из этой библиотеки по их порядковым номерам, будутработать правильно. Если же вы не определили порядковые номера функций, у приложений могутвозникнуть проблемы с правильной адресацией функции из-за возможного изменения этихномеров.Чтобы сказанное стало более понятным, рассмотрим подробнее механизм, с помощью которогоприложения ссылаются на функции из DLL-библиотек.Импортирование функцийКогда вы используете статическую компоновку, то включаете в файл проекта приложениясоответствующий lib-файл, содержащий нужную вам библиотеку объектных модулей.

Такаябиблиотека содержит исполняемый код модулей, который на этапе статической компоновкивключается в exe-файл загрузочного модуля.Если используется динамическая компоновка, в загрузочный exe-файл приложения записываетсяне исполнимый код функций, а ссылка на соответствующую DLL-библиотеку и функцию внутринее. Как мы уже говорили, эта ссылка может быть организована с использованием либо именифункции, либо ее порядкового номера в DLL-библиотеке.Откуда при компоновке приложения редактор связей узнает имя DLL-библиотеки, имя илипорядковый номер экспортируемой функции? Для динамической компоновки функции из DLLбиблиотеки можно использовать различные способы.Библиотека импортаДля того чтобы редактор связей мог создать ссылку, в файл проекта приложения вы должнывключить так называемую библиотеку импорта (import library ), созданную приложением ImportLib , входящим в состав системы разработки Borland Turbo C++ for Windows.

Соответствующеесредство имеется в SDK, а также в любой другой системе разработки приложений Windows.Библиотека импорта создается либо на основе dll-файла библиотеки, либо на основе файлаопределения модуля, используемого для создания DLL-библиотеки.В любом случае вам надо запустить приложение Import Lib, и из меню "File" выбрать строку "FileSelect...". При этом на экране появится диалоговая панель "Select File", с помощью которой выможете выбрать нужный вам dll- или def-файл (рис. 3.6).Рис. 3.6. Работа с приложением Import LibraryПосле выбора файла приложение Import Lib создаст библиотеку импорта в виде lib-файла,расположенного в том же каталоге, что и исходный dll- или def-файл. Этот файл необходимовключить в проект создаваемого вами приложения, пользующегося функциями DLL-библиотеки.Следует заметить, что стандартные библиотеки систем разработки приложений Windowsсодержат как обычные объектные модули, предназначенные для статической компоновки, так иссылки на различные стандартные DLL-библиотеки, экспортирующие функции программногоинтерфейса операционной системы Windows.В состав системы разработки Borland C++ for Windows версии 4.0 и 4.01 входит DLL-библиотека,содержащая функции стандартной библиотеки компилятора.

Эта библиотека расположена вфайле с именем bc40rtl.dll. В проекте приложения вы можете определить, что для стандартныхфункций следует использовать динамическую компоновку. В этом случае размер полученногозагрузочного модуля заметно сократится, однако для работы приложения будет нужен файлbc40rtl.dll.Использование оператора IMPORTSИспользование библиотек импорта - удобный, но не единственный способ компоновки функцийDLL-библиотеки. Этот способ можно рассматривать как способ неявной компоновки на этапередактирования загрузочного модуля приложения, так как имена импортируемых функций нигдене перечисляются.Другой способ основан на использовании в файле определения модуля приложения оператораIMPORTS .

С помощью этого оператора можно перечислить импортируемые функции, указавимена функций или их порядковые номера , а также имена файлов соответствующих DLLбиблиотек:IMPORTSMsg=dllsrc.4dllsrc.TellMeВо второй строке приведенного выше примера приложение импортирует функцию Msg из DLLбиблиотеки dllsrc.dll, причем порядковый номер указанной функции в библиотеке равен 4.В третьей строке из DLL-библиотеки dllsrc.dll импортируется функция с именем TellMe, причемее порядковый номер не используется.Для увеличения скорости работы приложения рекомендуется использовать способ, основанный нассылке по имени DLL-библиотеки и порядковому номеру функции внутри этой библиотеки.Динамический импорт функций во время выполнения приложенияВ некоторых случаях невозможно выполнить динамическую компоновку на этапередактирования.

Вы можете, например, создать приложение, которое состоит из основногомодуля и дополнительных, реализованных в виде DLL-библиотек. Состав этих дополнительныхмодулей и имена файлов, содержащих DLL-библиотеки, может изменяться, при этом вприложение могут добавляться новые возможности.Если вы, например, разрабатываете систему распознавания речи, то можете сделать ее в видеосновного приложения и набора DLL-библиотек, по одной библиотеке для каждогонационального языка.

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5160
Авторов
на СтудИзбе
439
Средний доход
с одного платного файла
Обучение Подробнее