Как собрать dll из исходного кода c

Обновлено: 21.11.2024

Следующие шаги относятся к Visual Studio 2008.

Шаг 1. Создайте проект для библиотеки DLL.

  1. Давайте создадим простую DLL-библиотеку консоли Win32: Visual Studio > Файл > Новый проект > Консольное приложение Win32.
  2. Назовите его как-нибудь сексуально, например MyDLL, и нажмите OK.
  3. На следующем экране нажмите «Далее» и выберите «DLL». Не трогайте другие параметры.
  4. Нажмите "Готово".

Шаг 2. Добавьте код для DLL.
Я создам новый класс и добавлю простой код.

  1. Щелкните правой кнопкой мыши имя проекта > Добавить > Класс > Назовите его, например, HelloDLL
  2. Добавьте следующий код.
  3. Чтобы создать библиотеку экспорта DLL: «Проект» > «Свойства MyDLL…» > «Свойства конфигурации» > «C/C++» > «Препроцессор» > Добавьте или вставьте «DLLDIR_EX» (без кавычек) в текстовое поле «Определение препроцессора» > «ОК». Это предотвратит предположения и предупреждения компилятора. [1]
  4. Создать > Создать решение
  5. Ваша DLL должна быть готова. У вас должны быть файлы MyDLL.dll и MyDLL.lib в каталоге project-directory\Debug.

HelloDLL.h

HelloDLL.cpp

Шаг 3. Используйте библиотеку DLL в новом проекте.

  1. Создайте новый проект: Visual Studio > Файл > Новый проект > Консольное приложение Win32. Назовите его Использование MyDLL и нажмите OK.
  2. Нажмите "Далее".
  3. Выберите Консольное приложение.
  4. Нажмите "Готово".

Шаг 4. Логистика для нового проекта.

  1. Добавьте файл MyDLL.lib в свой проект: Проект > Свойства > Свойства конфигурации > Компоновщик > Ввод > Напишите полный путь (включая имя файла) в кавычках. Пример: "C:\Examples\MyDLL\Debug\MyDLL.lib"
  2. Переместите файл MyDLL.dll в тот же каталог, где находится исходный код вашего проекта Использование MyDLL.
  3. Добавить заголовочный файл: «Проект» > «Свойства» > «Свойства конфигурации» > «C/C++» > «Дополнительные включаемые каталоги» > «Добавить каталог, в котором находится файл HelloDLL.h».

Шаг 5. Протестируйте библиотеку DLL.
Я использовал следующий код:

Спасибо за публикацию этой ценной информации и исходного кода C++! Очень полезно. :-)

Могу ли я узнать, где находится файл MyDLL.h? Это тот же каталог, что и MyDLL.cpp? Я не могу его найти?

Нет MyDLL.h или MyDLL.cpp. Единственными исходными файлами являются HelloDLL.h и HelloDLL.cpp.

MyDLL — это название проекта.

Здравствуйте, мне удалось решить эту проблему oledi, MyDLL.h из шага 4, «Добавить заголовочный файл: Проект > Свойства > Свойства конфигурации > C/C++ > Дополнительные каталоги включения > Добавить каталог, в котором находится файл MyDLL.h. расположен" должен быть HelloDLL.h

Вы правы. Я изменил это. Спасибо, Генри :)

Привет, в прошлом мне приходилось использовать dll-файл в некоторых моих проектах. Мой вопрос: скажем, у меня есть только файл dll, нет файла lib или ничего другого. У меня есть только dll и список методов, с помощью которых я могу использовать эту dll из клиентской программы. Теперь мой вопрос: в такой ситуации, как я могу включить каталог lib или файл заголовка?

Другой вопрос: как создать отдельный файл dll, чтобы мне не приходилось включать заголовочный файл, файл lib при вызове dll из клиентской программы

действительно хороший урок…
спасибо

отличный учебник..
он помогает мне решить мою проблему..
спасибо
:-)

Я думаю, что вместо этого вы используете статическую библиотеку, потому что dll загружаются из кода, например, в Win32 необходимо использовать LoadLibrary().

Привет,
у меня есть одна утилита, и мне нужно автоматически установить одну dll для нее. для этого нужно спросить о совместимости утилиты, такой как версия, а также спросить, является ли утилита пиратской или оригинальной версией. если это оригинальная версия, она должна запросить личность и предоставить к ней полный доступ. в противном случае некоторые свойства dll должны быть скрыты…. тогда только его нужно установить на утилиту. дайте мне несколько идей, чтобы сделать это. пожалуйста……

Привет! Кто-нибудь может подсказать, как реализовать DLL.
Я подготовил dll на WinXP (моя машина для разработки) с помощью MS Visula Studio 2010 и хочу протестировать на WinNT (мой сервер UAT).
Когда я пытаюсь зарегистрировать библиотеку DLL на сервере UAT для использования, появляется сообщение «Ошибка загрузки библиотеки (XXX.DLL)». Модуль не найден.

Есть идеи, что мне делать, чтобы моя dll работала и выбиралась приложением для тестирования.

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

DLL не является автономным исполняемым файлом. Библиотеки DLL работают в контексте приложений, которые их вызывают. Операционная система загружает DLL в пространство памяти приложения. Это делается либо при загрузке приложения (неявное связывание), либо по запросу во время выполнения (явное связывание). DLL также упрощают совместное использование функций и ресурсов между исполняемыми файлами. Несколько приложений могут одновременно обращаться к содержимому одной копии DLL в памяти.

Различия между динамической и статической ссылками

Статическое связывание копирует весь объектный код из статической библиотеки в исполняемые файлы, которые используют его при создании. Динамическое связывание включает только ту информацию, которая необходима Windows во время выполнения для поиска и загрузки библиотеки DLL, содержащей элемент данных или функцию. При создании DLL вы также создаете библиотеку импорта, содержащую эту информацию. Когда вы создаете исполняемый файл, который вызывает DLL, компоновщик использует экспортированные символы в библиотеке импорта, чтобы сохранить эту информацию для загрузчика Windows. Когда загрузчик загружает DLL, DLL отображается в пространство памяти вашего приложения. Если присутствует, вызывается специальная функция в DLL, DllMain , для выполнения любой инициализации, требуемой DLL.

Различия между приложениями и библиотеками DLL

Несмотря на то, что библиотеки DLL и приложения являются исполняемыми модулями, у них есть несколько отличий. Самое очевидное отличие состоит в том, что вы не можете запускать DLL. С точки зрения системы между приложениями и библиотеками DLL есть два фундаментальных различия:

Приложение может иметь несколько экземпляров, работающих в системе одновременно. DLL может иметь только один экземпляр.

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

Преимущества использования библиотек DLL

Динамическая привязка к коду и ресурсам имеет ряд преимуществ по сравнению со статической привязкой:

Динамическое связывание экономит память и сокращает количество операций подкачки. Многие процессы могут использовать DLL одновременно, разделяя в памяти одну копию доступных только для чтения частей DLL. Напротив, каждое приложение, созданное с использованием статически связанной библиотеки, имеет полную копию кода библиотеки, которую Windows должна загрузить в память.

Динамическое связывание экономит дисковое пространство и пропускную способность. Многие приложения могут совместно использовать одну копию DLL на диске. Напротив, каждое приложение, созданное с использованием статической библиотеки ссылок, имеет код библиотеки, связанный с ее исполняемым образом. Это занимает больше места на диске и требует большей пропускной способности для передачи.

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

Для послепродажной поддержки можно использовать библиотеки DLL. Например, библиотеку DLL драйвера дисплея можно изменить, чтобы она поддерживала дисплей, который был недоступен при поставке приложения.

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

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

Динамическое связывание предоставляет механизм расширения классов библиотеки Microsoft Foundation Class library (MFC). Вы можете получить классы из существующих классов MFC и поместить их в библиотеку DLL расширения MFC для использования приложениями MFC.

Динамическое связывание упрощает создание международных версий вашего приложения. Библиотеки DLL — это удобный способ предоставления ресурсов, зависящих от локали, которые значительно упрощают создание международных версий приложения.Вместо того, чтобы поставлять много локализованных версий вашего приложения, вы можете поместить строки и изображения для каждого языка в отдельную DLL ресурсов. Затем ваше приложение сможет загружать соответствующие ресурсы для этой локали во время выполнения.

Потенциальным недостатком использования библиотек DLL является то, что приложение не является автономным. Это зависит от наличия отдельного модуля DLL: того, который вы должны развернуть или проверить самостоятельно в процессе установки.

Подробнее о том, как создавать и использовать библиотеки DLL

В следующих статьях содержится подробная информация о том, как создавать библиотеки DLL C/C++ в Visual Studio.

Пошаговое руководство. Создание и использование библиотеки динамической компоновки (C++)
Описывает создание и использование библиотеки DLL с помощью Visual Studio.

Виды библиотек DLL
Информация о различных типах библиотек DLL, которые можно создать.

Часто задаваемые вопросы о библиотеках DLL
Содержит ответы на часто задаваемые вопросы о библиотеках DLL.

Связать исполняемый файл с библиотекой DLL
Описывает явное и неявное связывание с библиотекой DLL.

Инициализировать DLL
Обсуждается код инициализации DLL, который должен выполняться при загрузке DLL.

Поведение DLL и библиотеки времени выполнения Visual C++
Описывает последовательность запуска DLL библиотеки времени выполнения.

LoadLibrary и AfxLoadLibrary
Обсуждается использование LoadLibrary и AfxLoadLibrary для явного связывания с библиотекой DLL во время выполнения.

GetProcAddress
Обсуждается использование GetProcAddress для получения адреса экспортируемой функции в DLL.

FreeLibrary и AfxFreeLibrary
Обсуждается использование FreeLibrary и AfxFreeLibrary, когда модуль DLL больше не нужен.

Порядок поиска библиотеки Dynamic-Link
Описывает путь поиска, который операционная система Windows использует для поиска библиотеки DLL в системе.

Состояния модуля обычной библиотеки DLL MFC, динамически связанной с MFC.
Описывает состояния модуля обычной библиотеки DLL MFC, динамически связанной с MFC.

Библиотеки расширения MFC
Описывает библиотеки DLL, которые обычно реализуют повторно используемые классы, производные от существующих классов MFC.

Создание библиотеки DLL только для ресурсов
Обсуждается библиотека DLL только для ресурсов, которая не содержит ничего, кроме ресурсов, таких как значки, растровые изображения, строки и диалоговые окна.

Локализованные ресурсы в приложениях MFC: вспомогательные библиотеки DLL
Обеспечивает расширенную поддержку вспомогательных библиотек DLL, которая помогает создавать приложения, локализованные для нескольких языков.

Импорт и экспорт
Описывает импорт общедоступных символов в приложение или экспорт функций из DLL

Активная технология и библиотеки DLL
Позволяет реализовать объектные серверы внутри библиотеки DLL.

Автоматизация в DLL
Описывает, что предоставляет параметр автоматизации в мастере DLL MFC.

Соглашения об именах для библиотек DLL MFC
Обсуждается, как библиотеки DLL и библиотеки, включенные в MFC, следуют структурированному соглашению об именах.

Вызов функций DLL из приложений Visual Basic
Описывает, как вызывать функции DLL из приложений Visual Basic.

Связанные разделы

Использование MFC как части библиотеки DLL
Описывает обычные библиотеки DLL MFC, которые позволяют использовать библиотеку MFC как часть библиотеки динамической компоновки Windows.

Версия DLL MFC
Описывает, как можно использовать общие библиотеки динамической компоновки MFCxx.dll и MFCxxD.dll (где x — номер версии MFC) с приложениями MFC и библиотеками DLL расширений MFC.

Пример создания и использования DLL — библиотеки динамической компоновки на C в Windows с простыми шагами с исходным кодом C. Приведено как неявное, так и явное связывание dll из примера программ на языке C.

СОЗДАНИЕ DLL (библиотека динамической компоновки на C)

Этапы создания библиотечного проекта

Давайте начнем с вашей первой библиотеки DLL:

  • Запустите Visual Studio
  • Перейдите в меню Файл ->Создать ->Проект.
  • Выберите проект Visual C++ и в списке шаблонов выберите консольное приложение Win32.
  • Дайте название вашему проекту. Это будет имя вашего DLL-файла.
  • Нажмите "ОК".
  • Выберите DLL из типа приложения (на вкладке "Настройки приложения").
  • Отметьте пустой проект и нажмите "Готово".

Нам нужно создать файл заголовка и исходный файл для пустого проекта:

Создайте заголовочный файл и исходный код:

В обозревателе решений под названием проекта есть папки "Файлы заголовков" и "Исходные файлы". Щелкните правой кнопкой мыши файлы заголовков, Добавить -> Добавить новый элемент, а затем выберите Файл заголовка (.h) и введите имя, например. hellodll.h и добавьте его.

Откройте hellodll.h и вставьте приведенный ниже исходный код.

Создайте исходный файл C и исходный код:

Создать исходный файл hellodll.c

В обозревателе решений под названием проекта есть папки "Файлы заголовков" и "Исходные файлы". Щелкните правой кнопкой мыши исходные файлы, Добавить -> Добавить новый элемент, а затем выберите файл C++ (.cpp, укажите имя, например hello.c, и добавьте его.(Примечание: мы выбрали файл C++, но хотим написать код на C, поэтому дайте расширение .c)

Откройте hellodll.c и вставьте приведенный ниже исходный код.

Создайте проект, и библиотека будет готова

Скомпилируйте проект и перейдите в папку проекта. Вы должны найти ниже два файла в папке Debug или Release, независимо от того, что вы установили. Ваша библиотека готова к использованию.

hellodll.dll

hellodll.lib

ИСПОЛЬЗОВАНИЕ DLL — библиотека динамической компоновки

Статическое или неявное связывание — только с использованием файла заголовка dll и файла .lib.

Давайте начнем с тестирования приложения на основе консоли для использования ранее созданной библиотеки:

  • Запустите Visual Studio
  • Перейдите в меню Файл ->Создать ->Проект.
  • Выберите проект Visual C++ и в списке шаблонов выберите консольное приложение Win32.
  • Дайте название вашему проекту. Это название тестового приложения.
  • Нажмите "ОК".
  • Выберите Консольное приложение из Типа приложения (на вкладке Параметры приложения).
  • Отметьте пустой проект и нажмите "Готово".

Щелкните правой кнопкой мыши исходные файлы, Добавить -> Добавить новый элемент, а затем выберите файл C++ (.cpp) и укажите имя, например. testdll.c и добавьте его.

Скопируйте файлы hellodll.h и hellodll.lib из проекта dll, который вы уже создали, и вставьте их в папку текущего тестового проекта, где у вас есть test.vcproj.

Щелкните правой кнопкой мыши файлы заголовков, выберите Добавить -> Добавить существующий элемент, затем выберите hellodll.h и добавьте его.

Откройте файл test.c и вставьте приведенный ниже исходный код

При сборке и запуске тестового проекта строка «Hello DLL». будет напечатано. так как он вызывает функцию helloDLL() из библиотеки.

ЯВНАЯ ИЛИ ДИНАМИЧЕСКАЯ ССЫЛКА

Используя только файл .DLL и не используя заголовочный файл dll или файл .lib.

Создайте тестовый проект (шаги такие же, как описано выше) и создайте исходный файл, например. test.c

откройте test.c и вставьте приведенный ниже код

Создайте тестовый проект.

Скопируйте hellodll.dll из созданного вами проекта библиотеки динамической компоновки. и вставьте его в папку Debug или Release тестового проекта, которую вы установили.

Запустите проект, и вы получите вывод «Hello DLL». из библиотеки динамической компоновки в тестовой программе C.

С помощью DLL (библиотека динамической компоновки) мы можем сделать наш проект модульным и сократить время разработки. DLL повышает производительность проекта и способствует повторному использованию кода. Это также помогает разработчику беспрепятственно вставлять и удалять новые функции в проекте.


По сути, DLL — это совместно используемая библиотека, которая содержит код и данные, используемые более чем одной программой одновременно, и, как и исполняемый файл, DLL не может запускаться напрямую. DLL (библиотека динамической компоновки) вызывается приложением.

Например, в Windows файл Kernel32.dll отвечает за управление памятью, операции ввода/вывода и прерывания.

ПРОМОКОД - PROMOTION25

Наиболее важные функции библиотеки DLL: она загружается во время выполнения, когда приложение запрашивается для функциональности библиотеки DLL, и время загрузки очень мало.

В этой статье я научу вас, как создать DLL на C++ и как использовать эту DLL в приложении C++.

Шаги по созданию DLL на C++

Здесь я опишу, как создать проект DLL на C++ с помощью Visual Studio.

  • Откройте визуальную студию и щелкните строку меню, чтобы создать новый проект. См. изображение ниже.

  • После выбора нового проекта откроется новое диалоговое окно, в котором выберите тип проекта Win32 и дайте имя проекту DLL.

  • На странице "Обзор" диалогового окна мастера приложений Win32 нажмите кнопку "Далее". После нажатия следующей кнопки откроется новое окно. Это окно настройки приложения, здесь мы выберем тип приложения и нажмем кнопку «Готово», чтобы создать проект DLL.

  • После создания проекта DLL вы должны добавить файлы заголовков и исходный файл в соответствии с вашими требованиями. Здесь я добавляю только один заголовочный файл (Calculation.h).

  • Когда вы создали файл заголовка, напишите желаемое содержимое в соответствии с требованиями. Здесь я создаю библиотеку, которая выполняет некоторые основные арифметические операции, такие как сложение, вычитание и умножение.

Примечание. Когда вы создали проект DLL, PROJECTNAME_EXPORTS автоматически определяется в символах препроцессора проекта DLL. В этом примере CALCULATIONDLL_EXPORTS определяется при построении проекта CALCULATIONDLL DLL.

  • Пришло время определить функцию члена класса в исходном файле. Здесь я определяю все функции-члены в файле CalculationDll.CPP.
  • Теперь исходные файлы и файлы заголовков добавляются в проект DLL, чтобы создать DLL и библиотеку, просто создайте проект DLL. Если все в порядке и ваш проект DLL компилируется без каких-либо ошибок, то будут созданы файлы DLL и .lib.

Этапы создания приложения C++

Здесь я создаю приложение C++, которое будет использовать созданную DLL.

  • Нажмите на строку меню, чтобы создать новый проект приложения C++, в котором используется DLL, которую я только что создал.

  • После выбора нового проекта откроется новое диалоговое окно, в котором выберите тип проекта Консольное приложение Win32 и дайте имя проекту приложения.

  • На странице "Обзор" диалогового окна мастера приложений Win32 нажмите кнопку "Далее". После нажатия следующей кнопки откроется новое окно. Это окно настроек приложения, здесь мы выберем тип приложения и нажмем кнопку «Готово», чтобы создать проект консольного приложения c++.

Теперь ваш проект приложения C++ готов к использованию DLL (библиотека динамической компоновки).

Как связать DLL с приложением C++

Здесь я обсуждаю простые шаги по связыванию проекта DLL с проектом приложения C++.

  • Когда мы создали DLL и приложение, после этого мы должны сослаться на DLL с приложением, которое позволяет приложению использовать функцию DLL в соответствии с требованием. Для этого в проекте CalculationApplication в обозревателе решений выберите элемент Ссылки. В строке меню выберите "Проект", "Добавить ссылку".

  • При нажатии кнопки "Добавить новую ссылку" откроется диалоговое окно со списками библиотек, на которые вы можете ссылаться. Вам нужно просто нажать на кнопку галочки в нужной библиотеке. Здесь в диалоговом окне отображается только одна библиотека.

  • Теперь ваша созданная библиотека связана с созданным приложением, но перед использованием DLL в приложении вы должны добавить заголовочный файл DLL. Есть два способа выполнить эту задачу: один из них — скопировать заголовочный файл DLL в ваш проект приложения, но это может привести к изменениям в одной копии, которые не отразятся в другой. Это небезопасный способ, поэтому мы следуем второму способу, в котором мы просто ссылаемся на файл заголовка DLL, чтобы указать путь к исходным файлам заголовков DLL в пути к каталогам, включенным в проект приложения.

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

В приведенном ниже коде приложения я просто вызываю функцию вычисления DLL для выполнения сложения, вычитания и умножения.

DLL — это библиотеки с динамическим подключением, что означает, что они связаны с вашей программой во время выполнения, а не во время сборки. DLL состоит из трех частей:

код и данные

библиотека импорта

Код и данные — это те части, которые вы пишете: функции, переменные и т. д. Все они объединяются вместе, как если бы вы создавали один большой объектный файл, и помещаются в dll. Они вообще не помещаются в ваш .exe.

Экспорт содержит список функций и переменных, которые dll делает доступными для других программ. Думайте об этом как о списке «глобальных» символов, остальные скрыты. Обычно вы создаете этот список вручную с помощью текстового редактора, но это можно сделать автоматически из списка функций в вашем коде. Программа dlltool создает раздел экспорта dll из вашего текстового файла экспортированных символов.

Библиотека импорта представляет собой обычную UNIX-подобную библиотеку .a, но она содержит только крошечную часть информации, необходимой для того, чтобы сообщить ОС, как ваша программа взаимодействует с ("импортирует") dll. Эта информация связана с вашим .exe . Это также генерируется dlltool .

Создание библиотек DLL

Давайте рассмотрим простой пример создания dll. В этом примере мы будем использовать один файл myprog.c для программы ( myprog.exe ) и один файл mydll.c для содержимого dll ( mydll.dll ).

К счастью, с последними версиями gcc и binutils процесс сборки dll теперь довольно прост. Допустим, вы хотите создать эту минимальную функцию в mydll.c:

Сначала скомпилируйте mydll.c в объектный код:

Затем сообщите gcc, что он создает общую библиотеку:

Вот оно! Чтобы закончить пример, теперь вы можете связать dll с помощью простой программы:

Затем свяжите свою dll с помощью команды, например:

Однако, если вы создаете dll в качестве библиотеки экспорта, вам, вероятно, потребуется использовать полный синтаксис:

Имя вашей библиотеки — $ с префиксом cyg для DLL и lib для библиотеки импорта. Библиотеки Cygwin используют префикс cyg, чтобы отличить их от собственных библиотек DLL MinGW для Windows. Дополнительные сведения см. на веб-сайте MinGW. $ — это все ваши объектные файлы, объединенные в статические библиотеки или отдельные объектные файлы, а $ — это импортные библиотеки, с которыми вам нужно связать, например, '-lpng -lz -L/usr/local/special -lmyspeciallib' .

Связывание с DLL

Если у вас уже есть DLL, вам нужно создать библиотеку импорта, совместимую с Cygwin. Если у вас есть исходный код для компиляции DLL, см. раздел «Создание DLL» для получения подробной информации о сборке gcc для вас. Если у вас нет исходного кода или поставляемой рабочей библиотеки импорта, вы можете получить большую часть пути, создав файл .def с помощью этих команд (вам может потребоваться сделать это в bash, чтобы цитирование работало правильно):

Обратите внимание, что это будет работать, только если DLL не удалена. В противном случае вы получите сообщение об ошибке: «Нет символов в foo.dll».

Получив файл .def, вы можете создать из него библиотеку импорта следующим образом:

Читайте также: