exponenta event banner

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

В этом примере показано, как создать и настроить простой проект Microsoft ® Visual Studio ®, который вызывает динамическую библиотеку (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. -args параметр указывает, что входные данные a является настоящим двойником.

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

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

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

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

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

  2. Выберите «Установка» > «Visual C++» > «Общие» и выберите «Пустой проект». Введите имя проекта.

  3. Нажмите кнопку ОК.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Связанные темы