рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Решение №2.

Решение №2. - раздел Религия, Хранения формы в динамических библиотеках И Вот Тут Было Найдено Вполне Солидное Решение: Не Стыковать Модули С Основно...

И вот тут было найдено вполне солидное решение: не стыковать модули с основной программой, а сохранять их в отдельный файл и пусть любая программа загружает его по мере надобности. Сказали, сделали. Так появились библиотеки DLL, что означает Dynamic Link Library (DLL). Это библиотеки, которые подключаются к программе динамически. В них можно хранить исполняемый код в виде процедур или функций, ресурсы программы, графику или даже видео ролики.

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

Сейчас уже DLL -это не просто динамически подгружаемая библиотека. Ты наверно уже не раз слышал про компоненты ActiveX. Они так же могут быть выполнены в виде ocx или dll файлов. Да оно и понятно, ActiveX используются сейчас достаточно много и занимают места в несколько раз больше чем самая большая DLL библиотека. Так что единственный и нормальный выход экономить место винта и памяти это засунуть ActiveX в динамически подгружаемую библиотеку. Хотя это уже не та DLL, но всё же работает по тем же принципам.

У динамических библиотек есть единственный недостаток -на ее загрузку тратится лишнее время. Если бы код, находящийся в DLL был бы скомпонован с программой, то он грузился бы намного быстрее. Зато если библиотека уже загружена другой программой, то она появляется намного быстрей. Не веришь? Отложи сейчас книгу и возьми в руки секундомер. Теперь запусти Word или Excel. Засеки сколько времени будет проходить загрузка. Теперь закрой эту программу и запусти ее снова. Она появится на экране практически моментально. Это потому что после выхода из программы, DLL файл не выгружается из памяти. Это происходит только тогда, когда операционной системе не хватает памяти и ни одна из программ не использует в данный момент эту библиотеку.

А теперь представь себе, что такое Word!!! Представил? Это и текстовый редактор, и проверка орфографии, и построитель диаграмм, редактор формул и куча еще всякой всячины. Представь себе, что было бы, если все это засунуть в один файл? Нет, ты это не можешь представить. Это был бы один запускной файл размером в 30-50 мегабайт.

А теперь вспомни, что я тебе сегодня говорил: перед запуском, программа загружается в память. Представляешь теперь, сколько бы грузился Word? А сколько памяти он съёл бы? А тебе ведь и половина его возможностей абсолютно не нужна. И зачем же их грузить в память?

А при использовании динамических библиотек в запускном файле находится только самое основное, а дополнительные возможности подгружаются по мере надобности из DLL-файлов. Например, когда стартует Word, то загружается только модуль текстового редактора. Когда ты выбрал редактор формул или объект WordArt, то Word подгружает из dll файла код выбранного объекта и выполняет его. Таким образом, суммарная скорость загрузки уменьшается, причем очень даже значительно.

Ещё одно большое преимущество динамических библиотек – при их использовании код программы разбивается на несколько файлов (зависит от количества DLL файлов). Допустим, что в одной из функций находящейся в DLL оказался код с ошибкой. В этом случае не надо обновлять всю программу, а достаточно передать всем пользователям только этот DLL файл, и программа получит необходимые обновления.

У динамических библиотек сплошные преимущества и только два недостатка:

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

2. 2. Изначально динамические библиотеки были процедурными. Хотя сейчас умельцы умудряются использовать их для хранения объектов, но это очень неудобно. Но, несмотря на это, ActiveX (изначально объектные) могут храниться в файлах с расширением dll.

 

Но всё же динамические библиотеки получили широкое распространение и программисты используют их на каждом углу, когда надо и когда не надо. Никогда нельзя быть уверенным, что какой-то код уже больше никогда не понадобится. Всегда нужно рассчитывать на будущее.

Я надеюсь, что я тебя убедил в великих возможностях динамических библиотек. Это действительно так. Конечно же, ActiveX более продвинуты, но они требуют неудобной регистрации в системе (в реестре) и намного сложнее в программировании, а библиотеки пишутся достаточно просто и их достаточно только скопировать на другой компьютер, чтобы программа смогла её найти.

– Конец работы –

Эта тема принадлежит разделу:

Хранения формы в динамических библиотеках

Глава Динамически компонуемые библиотеки...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Решение №2.

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Решение №1.
Самым первым решением этой проблемы стал модульное программирование. Ты пишешь какой-то кусок кода, оформляешь его в виде модуля, а потом просто используешь его в своих программах. Все прекрасно и

Проблема №1.
Давай представим ситуацию, когда один добрый человек написал прекрасный модуль размером в 1 мегабайт. Другой добрый человек решил воспользоваться его возможностями и подключил к своей программе. Мо

Проблема №2.
Пока существовали только однозадачные операционные системы, проблема с излишней растратой дискового пространства была единственной. Но как только задумались о многозадачности и в мыслях Билла Гейтс

Из чего же сделан Windows?
Все наверно помнят такую песенку: "Из чего же, из чего же, из чего же, сделаны эти мальчишки?". Глупейшая песня, и я со слезами на глазах вспоминаю, как я в лагере (я имею ввиду пионерски

Графические движки.
Любой игрок обязан знать про существование OpenGL. Что это такое? Какой-то пакет программ? Какой-то SDK для создания графики? Ничего подобного, это всего лишь две динамические библиотеки opengl.dll

Begin end.
Если открыть менеджер проектов (Меню View->Project Manager), то в окне вообще не будет видно ни одного модуля. Это потому что код, который мы видели выше относиться к самой библиотеки. Вы

Begin end.
Обрати внимание, что функция у нас объявлена не так как всегда. В конце строки объявления, после типа возвращаемого значения стоит ключевое слово StdCall. Оно говорит о том, что дл

R:Integer; begin
r:=Summ(10,34); Application.MessageBox(PChar(IntToStr(r)), 'Результат функции Summ'); end; В первой строчке я вызываю функцию Summ с двумя

SysUtils, Classes; {$R *.RES} exports ShowAbout index 10; begin end.
Я добавил только одну строку exports ShowAbout index 10;. У нас будет только одна процедура ShowAbout с индексом 10. Эта процедура будет показывать окно «О программе».

Implementation
Обрати внимание, что первое описание процедуры я написал не в разделе type, а до него: procedure ShowAbout(Handle: THandle)stdcall; Это не являет

Function ShowAbout(Handle: THandle):LongInt;stdcall; procedure FreeAbout(FormRef: LongInt);export;stdcall
В разделе varпишем следующее: function ShowAbout;external 'ProjectDLL.dll' index 10; procedure FreeAbout;external 'ProjectDLL.dll' index 11; Всё

If f>0 then
FreeAbout(f); f:=ShowAbout(Handle); end; Здесь идёт проверка, если f больше нуля, то надо освободить память от старого окна, а потом пытат

If @sa=nil then exit;//Функция не найдена
f:=sa(Handle); FreeLibrary(dllHandle); end; Здесь у меня объявлено две локальные переменные: dllHandle – здесь будет храниться указатель на загруженную библиот

DLLEntryPoint(DLL_PROCESS_ATTACH); end.
В разделе usesпоявилось объявление двух новых модулей windows и dialogs, без них наш код не скомпилируется. Чуть дальше появилась процедура DLLEntryPoint с одн

Begin end.
Первое, что здесь бросается в глаза – объявление в разделе typeнового типа – TCompProc. Новый тип объявлен как процедура с одним параметром в виде переменной типа PChar

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги