Опция обертки библиотеки C++ позволяет создавать общую библиотеку из произвольного набора файлов MATLAB ®. Компилятор MATLAB SDK™ создает файл оболочки и файл заголовка. Файл заголовка содержит все точки входа для всех скомпилированных функций MATLAB.
Этот пример переписывает пример общей библиотеки C с помощью C++. Процедура создания общей библиотеки C++ из файлов MATLAB идентична процедуре создания общей библиотеки C, за исключением использования cpplib обертка. Введите следующую команду в одной строке:
mcc -W cpplib:libmatrix -T link:lib addmatrix.m multiplymatrix.m eigmatrix.m -v
-W cpplib:<libname> указывает MATLAB Compiler SDK на создание оболочки функции для общей библиотеки и вызов ее <libname>. -T link:lib задает целевой вывод в качестве общей библиотеки. Обратите внимание на каталог, в который продукт помещает общую библиотеку, потому что она понадобится позже.
Примечание
Из-за искажения имен в C++ необходимо скомпилировать приложение драйвера с той же версией стороннего компилятора, которая используется для компиляции общей библиотеки C++.
В версии C++ matrix приложение matrix_mwarray.cpp, массивы представлены объектами класса mwArray. Каждый mwArray объект класса содержит указатель на структуру массива MATLAB. По этой причине атрибуты mwArray объект - это супернабор атрибутов массива MATLAB. Каждый массив MATLAB содержит информацию о размере и форме массива (т.е. количество строк, столбцов и страниц) и один или два массива данных. Первый массив хранит действительную часть данных массива, а второй массив хранит мнимую часть. Для массивов без мнимой части второй массив отсутствует. Данные в массиве расположены в порядке «столбец-мажор», а не «строка-мажор».
Внимание
Избегать выдачи cd команды из приложения драйвера перед вызовом mclInitializeApplication. Это может привести к сбою при инициализации среды выполнения MATLAB.
Сведения о том, как MATLAB Compiler SDK использует уровень прокси для библиотек, которые должно связать приложение, см. в разделе Понимание уровня прокси mclmcrt.
matrix_mwarray.cpp файл драйвера находится в matlabroot\extern\examples\compilersdk\c_cpp\matrix.
Для компиляции matrix_mwarray.cpp код драйвера, вы используете компилятор C++. Путем выполнения следующих действий mbuild для компиляции кода используется компилятор C++, соответствующий вашей платформе разработки.
mbuild matrix_mwarray.cpp libmatrix.lib (Windows) mbuild matrix_mwarray.cpp -L. -lmatrix -I. (UNIX)
Примечание
Эта команда предполагает, что общая библиотека и соответствующий файл заголовка находятся в текущей рабочей папке.
В Windows ®, если это не так, укажите полный путь кlibmatrix.libи используйте -I для указания каталога, содержащего файл заголовка.
В UNIX ®, если это не так, замените "."(точка) после -L и -I с именем каталога, содержащего эти файлы, соответственно.
При использовании общей библиотеки C++ следует отметить два основных отличия:
Функции интерфейса используют mwArray тип для передачи аргументов, а не mxArray используется с общими библиотеками C.
Исключения C++ используются для сообщения об ошибках вызывающему абоненту. Поэтому все вызовы должны быть завернуты в try-catch блок.
Целевой объект общей библиотеки C++ генерирует два набора интерфейсов для каждой функции MATLAB. Дополнительные сведения см. в разделе Функции, созданные из файлов MATLAB. Общая сигнатура экспортируемых функций C++ выглядит следующим образом:
Функции MATLAB без возвращаемых значений
bool MW_CALL_CONV <function-name>(<const_mwArray_references>);
Функции MATLAB по крайней мере с одним возвращаемым значением
bool MW_CALL_CONV <function-name>(int <number_of_return_values>,
<mwArray_references>, <const_mwArray_references>);
В этом случае const_mwArray_references представляет разделенный запятыми список ссылок типа const mwArray& и mwArray_references представляет разделенный запятыми список ссылок типа mwArray&. Например, в libmatrix библиотека, интерфейс C++ к addmatrix Функция MATLAB создается следующим образом:
void addmatrix(int nargout, mwArray& a, const mwArray& a1,
const mwArray& a2);где a является выходным параметром и a1 и a2 являются входными параметрами.
Входные аргументы, передаваемые функции MATLAB через varargin должен быть передан через один mwArray это массив ячеек. Каждый элемент в массиве ячеек должен составлять входной аргумент. Выходные аргументы, полученные из функции MATLAB через varargout должно быть извлечено через один mwArray это массив ячеек. Каждый элемент в массиве ячеек будет представлять собой выходной аргумент. Число элементов в массиве ячеек будет равно number_of_return_values - количество именованных выходных параметров. Также обратите внимание, что,
Если функция MATLAB принимает varargin аргумент, функция C++ должна быть передана mwArray соответствующие varargin, даже если mwArray пуст.
Если функция MATLAB принимает varargout аргумент, функция C++ должна быть передана mwArray соответствующие varargin, даже если number_of_return_values устанавливается в число именованных выходных аргументов, что означает, что varargout будет пустым.
varargout аргумент должен следовать любым именованным выходным аргументам и предшествовать любым входным аргументам.
varargin аргумент должен быть последним аргументом.
Функции интерфейса C++ обрабатывают ошибки во время выполнения, создавая исключение C++. Используйте mwException класс для этой цели. Ваше приложение может поймать mwExceptions и запросите what() для получения сообщения об ошибке. Чтобы правильно обрабатывать ошибки при вызове функций интерфейса C++, переносите каждый вызов внутрь try-catch блок.
try
{
...
(call function)
...
}
catch (const mwException& e)
{
...
(handle error)
...
}
matrix_mwarray.cpp приложение иллюстрирует типичный способ обработки ошибок при вызове функций интерфейса C++.
Компилятор MATLAB SDK C/C + + API включает статические заводские методы для работы с разреженными массивами.
Полный список методов см. в разделе Служебные классы C++.