В этом примере показано, как создать и настроить простой проект Microsoft ® Visual Studio ®, который вызывает динамическую библиотеку (DLL), созданную MATLAB ® Coder™. В примере используется Microsoft Visual Studio 2017. В других версиях Microsoft Visual Studio может возникнуть другая процедура.
Создание функции MATLAB foo.
function c = foo(a) %#codegen c = sqrt(a); end
Сохранить как foo.m в локальной доступной для записи папке, например, C:\dll_test.
Используйте ту же версию того же компилятора для создания библиотеки DLL, которая используется для создания проекта Microsoft Visual Studio. В противном случае могут возникнуть ошибки связывания.
Для этого примера используйте компилятор Microsoft Visual Studio 2017. Для выбора компилятора, используемого генератором кода, введите mex -setup в командной строке. Дополнительные сведения см. в разделе Поддерживаемые и совместимые компиляторы.
Создание 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 создайте пустой проект:
Выберите «Файл» > «Создать» > «Проект».
Выберите «Установка» > «Visual C++» > «Общие» и выберите «Пустой проект». Введите имя проекта.
Нажмите кнопку ОК.
Написать main.c файл, который использует foo.dll. main.c функция должна:
Включите созданные файлы заголовков, содержащие прототипы функций для библиотечных функций.
Вызовите функцию завершения после последнего вызова функции библиотеки.
По умолчанию генератор кода включает вызов функции инициализации в начале сгенерированных функций точки входа C/C + +. Таким образом, нет необходимости вызывать функцию инициализации изmain.c. См. раздел Использование сгенерированных функций инициализации и завершения.
Чтобы создать файл:
В обозревателе решений щелкните правой кнопкой мыши папку Исходные файлы и выберите Добавить > Создать элемент
Выберите файл C++ (.cpp). В поле Имя введите main.c.
Нажмите "Добавить".
Введите код:
#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:
Выберите «Сборка» > «Диспетчер конфигурации».
Установите для активной платформы решения значение x64.
Если требуется создать 32-разрядную библиотеку DLL на 64-разрядной платформе, необходимо использовать определение 32-разрядной цепочки инструментов. См. раздел Сборка 32-разрядной DLL на 64-разрядной платформе Windows ® с использованием MSVC Toolchain.
Для построения проекта компилятору требуются соответствующие файлы заголовков. Компоновщику требуется сгенерированный .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 в дополнительные каталоги библиотек.
Создайте исполняемый файл. Выберите «Сборка» > «Сборка решения».
Сделайте библиотеку DLL доступной для исполняемого файла. Либо копировать foo.dll в папку, содержащую исполняемый файл, или добавить папку, содержащую foo.dll на твой путь.
Запустите исполняемый файл. Убедитесь, что выходные данные отображаются в соответствии с ожиданиями.