Как добавить dll в проект Visual Studio c

Обновлено: 21.11.2024

В этом примере показано, как создать и настроить простой проект Microsoft® Visual Studio®, который вызывает динамическую библиотеку (DLL), созданную MATLAB® Coder™. В примере используется Microsoft Visual Studio 2017. В других версиях Microsoft Visual Studio вы можете столкнуться с другой процедурой.

Создание динамической библиотеки C

Создайте функцию MATLAB foo .

Сохраните его как foo.m в локальной папке, доступной для записи, например, C:\dll_test .

Используйте ту же версию того же компилятора для создания библиотеки DLL, которую вы используете для создания проекта Microsoft Visual Studio. В противном случае вы можете столкнуться с ошибками связывания.

В этом примере используйте компилятор Microsoft Visual Studio 2017. Чтобы выбрать компилятор, который использует генератор кода, введите mex -setup в командной строке. Дополнительные сведения см. в разделе Поддерживаемые и совместимые компиляторы.

Сгенерируйте DLL для функции MATLAB foo . Параметр -args указывает, что ввод a является реальным двойным значением.

В системах Microsoft Windows ® codegen создает динамическую библиотеку C, foo.dll , и вспомогательные файлы в папке по умолчанию, C:\dll_test\codegen\dll\foo .

Создание проекта Microsoft Visual Studio

В Microsoft Visual Studio создайте пустой проект:

Выберите «Файл» > «Создать» > «Проект».

Выберите Установлено > Visual C++ > Общие и выберите Пустой проект. Введите название проекта.

Нажмите "ОК".

Создайте файл main.c, использующий библиотеку

Напишите файл main.c, использующий foo.dll . Функция main.c должна:

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

Вызовите функцию завершения после последнего вызова библиотечной функции.

По умолчанию генератор кода включает вызов функции инициализации в начале сгенерированных функций точки входа C/C++. Таким образом, вам не нужно вызывать функцию инициализации из main.c. См. раздел Использование сгенерированных функций инициализации и завершения.

Чтобы создать файл:

В обозревателе решений щелкните правой кнопкой мыши папку «Исходные файлы» и выберите «Добавить» > «Новый элемент».

Выберите файл C++ (.cpp). В поле Имя введите main.c .

Нажмите "Добавить".

Настройка платформы

MATLAB Coder автоматически использует цепочку инструментов, сконфигурированную для создания 64-разрядной библиотеки DLL. По умолчанию Microsoft Visual Studio настроена на сборку для платформы Win32. Вы должны изменить платформу сборки на x64, чтобы она соответствовала созданной 64-разрядной DLL. В Microsoft Visual Studio:

Выберите Сборка > Диспетчер конфигураций.

Установите для платформы активного решения значение x64.

Если вы хотите создать 32-разрядную библиотеку DLL на 64-разрядной платформе, необходимо использовать 32-разрядное определение цепочки инструментов. См. раздел Создание 32-разрядной библиотеки DLL на 64-разрядной платформе Windows® с помощью набора инструментов MSVC.

Указать внешние зависимости

Для сборки проекта компилятору требуются соответствующие заголовочные файлы. Компоновщику требуются сгенерированные файлы .lib.

Выделите свой проект в обозревателе решений и выберите "Проект" > "Свойства".

Генератор кода создает типы в файле rtwtypes.h, который включает файл tmwtypes.h. Этот файл хранится в matlabroot \extern\include , где matlabroot — это корневой каталог установки MATLAB. Чтобы вернуть корневой каталог, введите matlabroot в командном окне.

В разделе «Свойства конфигурации» > «C/C++» > «Общие» добавьте папки C:\dll_test\codegen\dll\foo и matlabroot \extern\include в дополнительные каталоги включения. Разделяйте записи точкой с запятой.

В разделе «Свойства конфигурации» > «Компоновщик» > «Ввод» добавьте foo.lib в «Дополнительные зависимости».

В разделе «Свойства конфигурации» > «Компоновщик» > «Общие» добавьте папку C:\dll_test\codegen\dll\foo в дополнительные каталоги библиотек.

Сборка и запуск исполняемого файла

Создайте исполняемый файл. Выберите «Сборка» > «Создать решение».

Использование библиотек, загруженных через vcpkg

Чтобы использовать библиотеку, которую вы загрузили с помощью диспетчера пакетов vcpkg, вы можете игнорировать приведенные ниже инструкции. Дополнительные сведения см. на странице vcpkg.io.

Использование статических библиотек

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

Если статическая библиотека не является частью решения:

  1. Щелкните правой кнопкой мыши узел проекта приложения в обозревателе решений и выберите "Свойства".
  2. На странице свойств Каталоги VC++ добавьте путь к каталогу, содержащему файл LIB, в Пути к библиотеке. Затем добавьте путь к заголовочному файлу (файлам) библиотеки в каталоги включения.
  3. На странице свойств Linker > Input добавьте имя файла LIB в Дополнительные зависимости.

Библиотеки динамических ссылок

Если DLL создается как часть того же решения, что и приложение, выполните те же действия, что и для статической библиотеки.

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

  1. Скопируйте DLL в выходную папку вашего проекта или в другую папку по стандартному пути поиска Windows для DLL. Дополнительные сведения см. в разделе Порядок поиска в библиотеке динамической компоновки.
  2. Выполните шаги 1–3 для статических библиотек, чтобы указать пути к заголовкам и файлу LIB.

COM-объекты

Если вашему собственному приложению C++ необходимо использовать COM-объект, и этот объект зарегистрирован, все, что вам нужно сделать, — это вызвать CoCreateInstance и передать CLSID объекта. Система найдет его в реестре Windows и загрузит. Таким же образом проект C++/CLI может использовать COM-объект. Или он может использовать его, добавив ссылку на него из списка «Добавить ссылки» > COM и используя его через вызываемую оболочку времени выполнения.

Справочные свойства

Каждый вид ссылки имеет свойства. Вы можете просмотреть свойства, выбрав ссылку в обозревателе решений и нажав Alt + Enter, либо щелкнув правой кнопкой мыши и выбрав «Свойства». Некоторые свойства доступны только для чтения, а некоторые можно изменить. Однако обычно вам не нужно вручную изменять эти свойства.

Эталонные свойства ActiveX

Свойства ссылок ActiveX доступны только для ссылок на COM-компоненты. Эти свойства отображаются только при выборе COM-компонента на панели «Ссылки». Свойства нельзя изменить.

Управление полным путем

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

Управление GUID

Отображает GUID для элемента управления ActiveX.

Управление версией

Отображает версию указанного элемента управления ActiveX.

Введите имя библиотеки

Отображает имя указанной библиотеки типов.

Инструмент "Обертка"

Отображает инструмент, используемый для создания сборки взаимодействия из указанной библиотеки COM или элемента управления ActiveX.

Свойства ссылки на сборку (C++/CLI)

Относительный путь

Отображает относительный путь от каталога проекта до указанной сборки.

Создать свойства

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

Копировать локально

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

Копировать локальные вспомогательные сборки (C++/CLI)

Указывает, следует ли автоматически копировать вспомогательные сборки указанной сборки в целевое расположение во время сборки. Используется только в том случае, если для параметра Копировать локальное задано значение true .

Вывод эталонной сборки

Указывает, что эта сборка используется в процессе сборки. Если true , сборка используется в командной строке компилятора во время сборки.

Свойства ссылок между проектами

Следующие свойства определяют связь между проектами из проекта, выбранного на панели ссылок, в другой проект в том же решении. Дополнительные сведения см. в разделе Управление ссылками в проекте.

Связать зависимости библиотеки

Если для этого свойства установлено значение True, система проектов связывает файлы LIB, созданные независимым проектом, с зависимым проектом. Как правило, вы указываете True.

Идентификатор проекта

Уникально идентифицирует независимый проект. Значением свойства является внутренний системный GUID, который нельзя изменить.

Использовать входные данные зависимостей библиотеки

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

Имя сборки

Отображает имя сборки для указанной сборки.

Культура

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

Описание

Отображает описание выбранной ссылки.

Полный путь

Отображает путь к каталогу указанной сборки.

Идентификация

Ярлык

Отображает метку ссылки.

Имя

Отображает название ссылки.

Токен открытого ключа

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

Сильное имя

true, если указанная сборка имеет строгое имя. Сборка со строгим именем имеет уникальную версию.

С помощью 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 для выполнения сложения, вычитания и умножения.

Эти инструкции, также доступные на сайте Microsoft, показывают, как создать с нуля проект Visual Studio 2010, который может использовать подпрограммы dll, созданные в другом месте, путем ссылки. По сути, здесь описывается то же самое, что и в том, как связать DLL-файлы, но с дополнительными снимками экрана, чтобы сделать его более интуитивным.

Шаг 1. Создайте новый проект DLL

• В меню «Файл» выберите «Создать», а затем «Проект…».
• На панели Типы проектов в разделе Visual C++ выберите Win32.
• На панели Шаблоны выберите Консольное приложение Win32.
• В поле Имя выберите имя проекта, например MathFuncsDll.
• В поле Имя решения выберите имя решения, например DynamicLibrary.
• Затем нажмите OK, чтобы запустить мастер приложений Win32.

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

Шаг 2. Добавьте класс(ы) в библиотеку динамической компоновки

• В меню «Проект» выберите «Добавить новый элемент…».
• На панели «Категории» в разделе Visual C++ выберите «Код».
• На панели «Шаблоны» выберите «Файл заголовка» (.h). Выберите имя файла заголовка, например MathFuncsDll.h, и нажмите «Добавить». Отобразится пустой файл.

• Вставьте пример кода:

Обратите внимание на модификатор __declspec(dllexport) в объявлениях методов выше. Эти модификаторы позволяют экспортировать метод из библиотеки DLL, чтобы его можно было использовать в других приложениях.

Шаг 3. Создайте исходный код для класса(ов)

• В меню «Проект» выберите «Добавить новый элемент…». Появится диалоговое окно «Добавить новый элемент».
• На панели «Категории» в разделе Visual C++ выберите «Код». На панели Шаблоны выберите Файл C++ (.cpp). Выберите имя исходного файла, например MathFuncsDll.cpp, и нажмите «Добавить». Отобразится пустой файл.
• Используйте этот пример кода:

Шаг 4. Встройте проект в библиотеку DLL

• В меню «Проект» выберите «Свойства MathFuncsDll…».
• На левой панели в разделе «Свойства конфигурации» выберите «Общие».
• На правой панели измените Тип конфигурации на Динамическая библиотека (.dll).
• Нажмите OK, чтобы сохранить изменения.

Шаг 5. Скомпилируйте DLL

• Выберите «Сборка решения» в меню «Сборка». Это создает DLL, которую могут использовать другие программы

Шаг 6. Создайте отдельное приложение, которое ссылается на библиотеку DLL

• В меню «Файл» выберите «Создать», а затем «Проект…».
• На панели Типы проектов в разделе Visual C++ выберите Win32.
• На панели Шаблоны выберите Консольное приложение Win32.
• Выберите имя для проекта, например MyExecRefsDll, и введите его в поле Имя. Рядом с Решением выберите Добавить в решение из раскрывающегося списка. Это добавит новый проект в то же решение, что и библиотека динамической компоновки.
• Нажмите OK, чтобы запустить мастер приложений Win32.

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

Шаг 7. Начните использовать функции DLL

После создания нового консольного приложения для вас создается пустая программа с тем же именем, что и для проекта, который вы выбрали выше. В этом примере MyExecRefsDll.cpp. Чтобы использовать подпрограммы, которые вы создали в DLL, вы ссылаетесь на нее:

• Выберите «Ссылки…» в меню «Проект».
• В диалоговом окне «Страницы свойств» разверните узел «Общие свойства» и выберите «Ссылки».
• Нажмите кнопку "Добавить новую ссылку...":

Появится диалоговое окно "Добавить ссылку" со списком всех библиотек, на которые вы можете ссылаться.

• На вкладке «Проекты» выберите MathFuncsDll.
• Затем выберите ОК:

Шаг 8. Ссылка на файлы заголовков DLL

• В диалоговом окне Страницы свойств разверните узел Свойства конфигурации, затем узел C/C++ и выберите Общие.
• Рядом с дополнительными каталогами включения введите путь к местоположению файла заголовка MathFuncsDll.h:
• (например, C:\Users\andy\Documents\Visual Studio 2010\Projects\DynamicLibrary \MathFuncsDll — вам нужно будет найти свою собственную)

Шаг 9. Сообщите системе, где найти библиотеки DLL во время выполнения

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