В этом примере показано, как создать и сконфигурировать простой проект 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
генерирует динамическую библиотеку 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
. main.c
функция должна:
Включайте сгенерированные заголовочные файлы, которые содержат прототипов функции для библиотечных функций.
Вызовите оконечную функцию после вызова библиотечной функции в последний раз.
По умолчанию генератор кода включает вызов инициализировать функции в начале сгенерированных функций точки входа C/C++. Так, вы не должны вызывать инициализировать функцию от 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
к вашему пути.
Запустите исполняемый файл. Проверьте, что выход появляется, как вы ожидаете.