В этом примере показано, как создать и сконфигурировать простую Microsoft® Визуальная студия® проект, который вызывает динамическую библиотеку (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
. 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 создайте пустой проект:
Выберите File > New > Project.
Выберите Installed > Visual C++ > General и Empty project. Введите имя проекта.
Нажмите OK.
Написание main.c
файл, который использует foo.dll
. The main.c
функция должна:
Включите сгенерированные файлы заголовков, которые содержат прототипы функций библиотеки.
Вызовите функцию terminate после последнего вызова функции библиотеки.
По умолчанию генератор кода включает вызов функции инициализации в начале сгенерированных функций точки входа C/C + +. Итак, вам не нужно вызывать функцию initialize из main.c
. См. Использование сгенерированных функций инициализации и завершения работы.
Чтобы создать файл:
Из Solution Explorer щелкните правой кнопкой мыши папку Source Files и выберите Add > New Item
Выберите C++ File (.cpp). В Name поле введите main.c
.
Нажмите Add.
Введите код:
#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:
Выберите Build > Configuration Manager.
Установите Active solution platform значение x64.
Если вы хотите создать 32-разрядную библиотеку DLL на 64-разрядной платформе, необходимо использовать 32-разрядное определение набора инструментальных средств. См. раздел Сборка 32-разрядной библиотеки DLL на 64-разрядной платформе Windows ® с использованием набора инструментальных средств MSVC.
Чтобы создать ваш проект, компилятору требуются связанные заголовочные файлы. Линкер требует сгенерированного .lib
файлы.
Выделите свой проект в Solution Explorer, а затем выберите Project > Properties.
Генератор кода производит типы в файле 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. Разделите значения точкой с запятой.
В разделе Configuration Properties > Linker > Input, добавить foo.lib
к Additional Dependencies.
Под Configuration Properties> Linker> General, добавьте папку C:\dll_test\codegen\dll\foo
к Additional Library Directories.
Создайте исполняемый файл. Выберите Build > Build Solution.
Сделайте библиотеку DLL доступной для исполняемого файла. Либо копировать foo.dll
в папку, содержащую исполняемый файл, или добавить папку, содержащую foo.dll
на ваш путь.
Запустите исполняемый файл. Проверьте, что выходы отображаются в соответствии с вашими ожиданиями.