Далее мы рассмотрим, что такое DLL (динамическая библиотека ссылок) и как создать такую библиотеку. DLL — это код, хранящийся в файле с расширением .dll. Код может быть использован другими программами, но сама библиотека не является программой. В целом, DLL представляют собой скомпилированные функции. Однако библиотека Yuchih обладает уникальными свойствами при одновременном запуске двух или более программ Windows. Загрузка библиотеки в память может быть статической или динамической.
При статической загрузке DLL автоматически загружается при запуске использующего ее приложения. Такие DLL содержат экспортируемые функции, описанные в архиве библиотеки внедрения (архив библиотеки в начале). Чтобы использовать статические нагрузки, файл .lib библиотеки DLL должен быть включен при подключении. В C ++ Builder это означает, что файл .LIB должен быть включен в проект через Project Manager.
Виртуальная загрузка позволяет загружать библиотеки DLL в соответствии с вашими потребностями и удалять их, когда они больше не нужны. Однако использование этих библиотек сложнее, чем статическое. Давайте рассмотрим создание и использование статических загрузок DLL.
Статическая загрузка
Создайте проект (файл / новый / dll). В результате будет создан проект, содержащий
Также длинный комментарий, предупреждающий, что для работы DLL необходимо, чтобы DLL была обнаружена при использовании регистра класса string.
Для экспорта из DLL и импорта в DLL необходимо использовать модификаторы __export и __import соответственно. Однако конструктор C ++ позволяет использовать новое ключевое слово __delspec () с dllexport и dllimport соответственно. Поймите, что для извлечения функции из библиотеки требуется один заголовочный файл с описанием экспортируемой функции __delspec (dllexport). Для ввода функций в приложение необходимо иметь тот же заголовочный файл. Некомфортно. Эту проблему можно легко решить. Добавьте следующее в заголовочный файл библиотеки
Напишите #define build_dll в исходном файле dll и напишите __declspec(dlllexport)dll_exp. При программировании просто добавьте строку #define build_app и просто включите заголовочный файл DLL.
Пример DLL: файл p.cpp
Когда вы нажимаете кнопку Run, печатается сообщение о том, что программа не может быть выполнена. Напишите программу вызова. В том же каталоге создайте новый проект (файл /new application), поместите кнопку на форму и создайте оператор события OnClick. Исполняемый файл должен иметь следующий формат
Не забудьте про объявление в начале файла. Перейдите в менеджер проектов, откройте проект и добавьте файл .lib из предыдущего проекта с помощью DLL (щелкните правой кнопкой мыши Add). Выполняйте свою работу.
Как вы видите, для использования DLL необходимы три файла: сама DLL, заголовок и библиотечный файл .LIB.
Динамическая загрузка
Динамическая загрузка гораздо сложнее. Однако для динамической загрузки требуется только сама DLL (ни .lib, ни заголовочный файл не требуются, но могут быть использованы для иллюстрации экспортируемой функциональности предпочтительного пользователя).
Давайте рассмотрим пример того, как выполняется динамическая загрузка. Создайте новый проект DLL и поместите в него следующее
Скомпилируйте проект, и DLL будет создана.
Далее создайте проект приложения (форму с кнопкой и обработчиком события OnClick кнопки), аналогичный проекту со статической загрузкой.
Запуск этого проекта выведет сообщение при нажатии на кнопку. Давайте посмотрим, как это работает.
- void (__stdcall * Message) (char * s); — Объявление указателя на функцию.
- HINSTANCE dllp = LoadLibrary ("p.dll"); — Загрузите библиотеку в память.
- Message = (void (__ stdcall *) (char *) GetProcAddress (dllp, "_Message"); — Назначение адреса указателя на функцию DLL.
- Message ("Hi From Dynamic DLL"); вызов функции задачи (в этом суть).
- FreeLibrary ("dllp"); — удаляет библиотеку из памяти.
Обратите внимание, что точное расположение библиотеки может быть указано во время загрузки (не обязательно в том же каталоге, что и приложение).