Опция обертки библиотеки C++ позволяет вам создавать разделяемую библиотеку из произвольного набора файлов MATLAB®. MATLAB Compiler 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 Runtime.
Для получения информации о том, как MATLAB Compiler SDK использует слой прокси в библиотеках, которые приложение должно соединить, видеть, Изучают Слой Прокси mclmcrrt.
matrix_mwarray.cpp
файл драйвера расположен в matlabroot\extern\examples\compilersdk\c_cpp\matrix
.
Код mwArray API C++, чтобы Реализовать Разделяемую Библиотеку
Скомпилировать 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
isempty.
Если функция 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++.
API C/C++ MATLAB Compiler SDK включает статические методы фабрики для работы с разреженными массивами.
Для полного списка методов смотрите Сервисные Классы C++.