Использование динамической библиотеки в проекте Microsoft Visual Studio

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

Сгенерируйте динамическую библиотеку на C

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

    function c = foo(a) 
    %#codegen
      c = sqrt(a);
    end
    
  2. Сохраните его как foo.m в локальной папке с возможностью записи, например C:\dll_test.

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

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

  4. Сгенерируйте DLL для функции MATLAB foo. The -args опция задает, что входной a - настоящий двойник.

    codegen -config:dll foo -args {0} -report

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

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

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

  1. Выберите File > New > Project.

  2. Выберите Installed > Visual C++ > General и Empty project. Введите имя проекта.

  3. Нажмите OK.

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

Написание main.c файл, который использует foo.dll. The main.c функция должна:

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

  • Вызовите функцию terminate после последнего вызова функции библиотеки.

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

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

  1. Из Solution Explorer щелкните правой кнопкой мыши папку Source Files и выберите Add > New Item

  2. Выберите C++ File (.cpp). В Name поле введите main.c.

  3. Нажмите Add.

  4. Введите код:

    #include "foo.h"
    #include "foo_terminate.h"
    #include <stdio.h>
    
    int main()
    {
      printf("%f\n", foo(26));
      foo_terminate();
      getchar();
      return 0;
    }

Сконфигурируйте платформу

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

  1. Выберите Build > Configuration Manager.

  2. Установите Active solution platform значение x64.

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

Задайте внешние зависимости

Чтобы создать ваш проект, компилятору требуются связанные заголовочные файлы. Линкер требует сгенерированного .lib файлы.

  1. Выделите свой проект в Solution Explorer, а затем выберите Project > Properties.

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

    В разделе Configuration Properties > C/C++ > General, добавьте папки C:\dll_test\codegen\dll\foo и matlabroot\extern\include к Additional Include Directories. Разделите значения точкой с запятой.

  3. В разделе Configuration Properties > Linker > Input, добавить foo.lib к Additional Dependencies.

  4. Под Configuration Properties> Linker> General, добавьте папку C:\dll_test\codegen\dll\foo к Additional Library Directories.

Создайте и запустите исполняемый файл

  1. Создайте исполняемый файл. Выберите Build > Build Solution.

  2. Сделайте библиотеку DLL доступной для исполняемого файла. Либо копировать foo.dll в папку, содержащую исполняемый файл, или добавить папку, содержащую foo.dll на ваш путь.

  3. Запустите исполняемый файл. Проверьте, что выходы отображаются в соответствии с вашими ожиданиями.

Похожие темы