Рассматривается концепция DLL, создание библиотеки, статическое и динамическое связывание библиотеки с приложением. Цель лекции. На лекции рассматриваются вопросы создания, а также различные способы использования динамически подключаемых библиотек - DLL.
Что такое DLLСовременное программирование стало достаточно сложным, уже написаны километры строк кода, и некоторые его части время от времени приходится дублировать в разных программах. Если бы каждый программист в каждой новой программе заново писал весь необходимый код, языки программирования никогда бы не получили такого стремительного развития. Однако мы в своих проектах можем использовать инструменты, созданные другими программистами - типы, процедуры, функции. И всё было бы хорошо, если бы не одно НО. И наша программа от такого внедрения .
Использую Lazarus 0.9.12b. Lazarus - он же не только под винду, а в линухе свои библиотеки, не dll. Так зачем привязывать расширение? Есть исходник написанной DLL на Delphi 7, возникла необходимость перенести на Lazarus. На лекции рассматриваются вопросы создания, а также различные способы использования динамически подключаемых библиотек - DLL. Ну, в Lazarus мы можем использовать модули Delphi, а также код на Ассемблере. Но если код был написан на С++ или Visual Basic, к. Использование DLL (Lazarus). Как мне загрузить библиотеку и использовать процедуры и функции в ней? Добавить комментарий.
Остановился на среде Lazarus (Free Pascal). Но вот беда: при сборке компилятор выдает не *.dll, а *.exe! А это вообще отдельная история - установку GLScene под лазарус надо применять в качестве уголовного наказания для киберпреступников. В Windows такая библиотека представляет собой файл *.dll, в Linux и Unix - *.so (Shared Object Library), а в MacOS X - *.dylib (Dynamic Shared Library). Его имеет смысл использовать тогда, когда вы создаете на Lazarus и DLL, и использующую её программу.
Казалось бы, пустяки, современное аппаратное обеспечение достаточно хорошо развито, и мы можем себе это позволить. Но это все же тысячи строк чужого кода, причем далеко не весь этот код задействован в наших проектах! Теперь представьте, что вы пишете одну программу за другой, внедряете в нее одни и те же модули, в результате ваши проекты содержат мегабайты совершенно одинакового кода. И ладно бы только это, но представьте также, что вы одновременно загружаете и используете несколько программ (да здравствует многозадачность!).
А эти программы тоже могут иметь в своем составе множество строк дублированного кода. Ну, в Lazarus мы можем использовать модули Delphi, а также код на Ассемблере. Но если код был написан на С++ или Visual Basic, к примеру? Короче говоря, требовался новый подход, позволяющий использовать чужой код, не внедряя его непосредственно в программу, и, кроме того, .
И таким подходом стала DLL. DLL(англ., Dynamic Link Library - Динамически Подключаемые Библиотеки) - универсальный механизм внедрения в программу функций и процедур, написанных другими программистами, и возможно, на другом языке программирования.
Внедрение происходит не в момент компиляции проекта, как в случае модулей, а в момент загрузки готовой программы в оперативную память. Использование DLL дает нам еще одно очень важное преимущество. Представьте, что у вас десятки программ импортируют какой- то код.
И вот, этот код нужно изменить, или дополнить, потому что вы перешли на другую ОС, на другие стандарты или просто потому, что начальство потребовало от вас расширить функциональность ваших программ. Если бы вы использовали модули, вам пришлось бы туго - нужно было бы переделывать не только этот модуль, но и перекомпилировать ваши программы. Но вы ведь их создавали не неделю и не месяц, правда? Что, если часть из них вы писали когда- то на Delphi 7, другую часть на Delphi XE3, а третью - уже на Lazarus? Работа была бы та еще.
Но с использованием DLL эта задача сильно упрощается. Вам нужно переделать всего лишь эту самую DLL- библиотеку, а программы, использующие её, переделывать уже не нужно!
Правда, если вы захотите их модифицировать (чтобы, например, использовать qlua.dll, о чем написано в конце общей части), то лучше скопировать эти файлы в папку с проектом и уже там изменять их. У меня русифицированный Lazarus, поэтому картинки такие. Lazarus версии 0.90.30(Windows XPSP3). Я модифицировал Ваш код. Как Вы специфически настраивали компилятор, свойства проекта, что нестандартное использовали? Cкачать библиотеку dblib.dll Lazarus Lazarus Laz 1.4, не видит libmysql.dll (5.6) Использование dll библиотеки Lazarus Статическое подключение Dll Lazarus Lazarus. Нет, это две разные версии библиотек, нужно использовать либо одну, либо другую в зависимости от битности ОС.
Каким же образом используются эти DLL? Фактически, DLL - это библиотека тех инструментов, которые могут быть использованы вами в различных проектах.
Причем с учетом того, что вы, может быть, будете использовать различные языки программирования. Итак, первым делом, вы создаете саму библиотеку - файл*. Создается он, как отдельное приложение, но после компиляции сам по себе работать все равно не сможет, поскольку не имеет собственной точки входа, как выполняемый exe- файл. Далее, вы создаете приложение. Файл используемой динамической библиотеки вы помещаете в ту же папку, что и проект. В случае, если несколько ваших проектов будут использовать эту библиотеку, то её лучше поместить в какую- либо системную папку, например,C: \Windows\system. Тогда все эти программы смогут подгружать данную библиотеку, не указывая её адреса - Windows просматривает все свои системные папки и знает, где находится эта DLL.
Функции и процедуры, описанные в DLL, наша программа будет воспринимать, как свои собственные. И когда во время выполнения программы происходит вызов таких функций и процедур, то будет подгружена соответствующая DLL. Во время компиляции проекта код библиотеки не будет внедрен в программу. Это означает две вещи: ваша программа не будет иметь лишнего кода; при распространении программы между пользователями вам нужно будет также позаботиться, чтобы у них была установлена и эта dll- библиотека. Когда пользователь загружает вашу программу, то также загружается и используемый dll- файл, на это тратится дополнительное время. Зато библиотека остается в оперативной памяти даже после завершения работы загрузившей её программы.
И если затем будет загружена другая программа, использующая ту же DLL, она уже не будет тратить время на повторную загрузку этой библиотеки, а воспользуется уже загруженной в память версией. Более того, если будут одновременно работать несколько программ, использующих одну и ту же DLL, то они не будут загружать для себя по копии этой библиотеки, поскольку Windows гарантирует, что одновременно может быть загружена только одна копия динамической библиотеки. Так что первая из этих программ загрузит DLL в оперативную память, остальные будут использовать её же, не тратя лишнего времени на загрузку. Зато когда вы загружаете MS Word вторично, он грузится гораздо быстрее, так как нужные библиотеки уже в оперативной памяти!
Почувствовали разницу между DLL и модулями? Кстати, динамическим библиотекам принято давать расширение *. Вы можете дать такой библиотеке любое расширение, или даже вообще не указывать его! Например, драйверы устройств имеют расширение *. У DLL есть один недостаток: поскольку они языконезависимы, а также по некоторым другим причинам, в этих библиотеках нельзя использовать глобальные переменные, которые будут доступны в программе. Поэтому в DLL нельзя использовать объекты (свойства объектов - это глобальные переменные).
Так что воспринимайте DLL, как набор процедур и функций, который удобно подгружать к различным программам. В нашем курсе подразумевается, что мы используем операционную систему семейства Windows, однако механизм динамически подключаемых библиотек существует во всех современных операционных системах.
В Windows такая библиотека представляет собой файл*. Linux и Unix - *. Shared Object. Library), а в Mac. OS X - *. dylib (Dynamic Shared Library).
И все эти библиотеки можно создавать с помощью Lazarus. Учитывая, что мы используем ОС Windows, мы будем рассматривать создание dll- файлов.