Интегрируйте C++ разделяемые библиотеки

C++ разделяемая обертка библиотеки

Опция обертки библиотеки C++ позволяет вам создавать разделяемую библиотеку из произвольного набора MATLAB® файлы. MATLAB Compiler SDK™ генерирует файл обертки и заголовочный файл. Заголовочный файл содержит все точки входа для всех скомпилированных функций MATLAB.

C++ разделяемый пример библиотеки

Этот пример переписывает совместно использованный пример библиотеки 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 содержит информацию о размере и форме массива (i.e., количество строк, столбцов и страниц) и или один или два массива данных. Первый массив хранит действительную часть данных массива, и второй массив хранит мнимую часть. Для массивов без мнимой части не присутствует второй массив. Данные в массиве располагаются в упорядоченном по столбцам, а не упорядоченном по строкам, порядке.

Внимание

Постарайтесь не выпускать 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++ разделяемая библиотека в приложение

Существует два основных отличий, чтобы отметить при использовании совместно использованной библиотеки 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++.

Работа с C++ разделяемые библиотеки и разреженные массивы

API C/C++ MATLAB Compiler SDK включает статические методы фабрики для работы с разреженными массивами.

Для полного списка методов смотрите Сервисные Классы C++.

Похожие темы