Этот пример создает MATLAB® интерфейс к библиотеке C++, объявленной в заголовочном файле matrixOperations.hpp и определено в исходном файле C++ matrixOperations.cpp. MATLAB предоставляет эти исходные файлы для использования в этом примере. Файлы находятся в этой папке:
fullfile(matlabroot,'extern','examples','cpp_interface')
Этот пример создает файл общей библиотеки. Пример, в котором используется файл общей библиотеки, предварительно созданный MATLAB, см. в разделе Публикация интерфейса в библиотеке общего C++ в Windows.
Можно использовать любой компилятор C++, поддерживаемый MathWorks. Чтобы убедиться, что у вас есть компилятор C++, введите:
mex -setup cpp
Этот пример использует компилятор Microsoft Visual C++ 2017.
Идентифицируйте имена и пути к программным продуктам библиотеки C++.
productPath = fullfile(matlabroot,'extern','examples','cpp_interface'); hppFile = 'matrixOperations.hpp'; cppFile = 'matrixOperations.cpp';
Звонить clibgen.generateLibraryDefinition.
clibgen.generateLibraryDefinition(fullfile(productPath,hppFile),... "SupportingSourceFiles",fullfile(productPath,cppFile),... "IncludePath",productPath,... "ReturnCArrays",false) % treat output as MATLAB arrays
Using Microsoft Visual C++ 2017 compiler. Generated definition file definematrixOperations.mlx and data file 'matrixOperationsData.xml' contain definitions for 10 constructs supported by MATLAB. 5 construct(s) require(s) additional definition. To include these construct(s) in the interface, edit the definitions in definematrixOperations.mlx. Build using build(definematrixOperations).
Чтобы определить отсутствующие конструкции, щелкните ссылку в generateLibraryDefinition выводить сообщение для редактирования определений в definematrixOperations.mlx. Для получения информации об изменении этого файла и примеров для определения аргументов смотрите Задать отсутствующие сведения для сигнатур MATLAB.
Поиск файла определения для setMat метод и раскомментируйте операторы, определяющие его. Чтобы определить src аргумент, в этом defineArgument оператор, замените <SHAPE> с "len".
defineArgument(setMatDefinition, "src", "clib.array.matrixOperations.Int", "input", "len");
В методе getMat, задайте RetVal вывод путем замены <SHAPE> с "len".
defineOutput(getMatDefinition, "RetVal", "int32", "len");
В методе copyMat, задайте dest аргумент путем замены <SHAPE> с "len".
defineArgument(copyMatDefinition, "dest", "clib.array.matrixOperations.Int", "input", "len");
В функциональном addMat, задайте mat аргумент в addMat функций путем замены <SHAPE> с 1.
defineArgument(addMatDefinition, "mat", "clib.matrixOperations.Mat", "input", 1);
В функциональном updateMatBySize, задайте arr аргумент путем замены <SHAPE> с "len".
defineArgument(updateMatBySizeDefinition, "arr", "clib.array.matrixOperations.Int", "input", "len");
Сохраните и закройте файл определения.
definematrixOperations;
summary(definematrixOperations)
MATLAB Interface to matrixOperations Library
Class clib.matrixOperations.Mat
Constructors:
clib.matrixOperations.Mat()
clib.matrixOperations.Mat(clib.matrixOperations.Mat)
Methods:
setMat(clib.array.matrixOperations.Int)
int32 getMat(uint64)
uint64 getLength()
copyMat(clib.array.matrixOperations.Int)
No Properties defined
Functions
int32 clib.matrixOperations.addMat(clib.matrixOperations.Mat)
clib.matrixOperations.updateMatByX(clib.matrixOperations.Mat,int32)
clib.matrixOperations.updateMatBySize(clib.matrixOperations.Mat,clib.array.matrixOperations.Int)build(definematrixOperations)
Building interface file 'matrixOperationsInterface.dll'. Interface file 'matrixOperationsInterface.dll' built in folder 'C:\Users\matrixOperations'. To use the library, add the interface file folder to the MATLAB path.
Нажмите на interface file folder ссылка для добавления интерфейса к пути. Кроме того, введите:
addpath('matrixOperations')В командной строке MATLAB отобразите справку по интерфейсу. Введите эту команду, чтобы загрузить пакет.
doc clib.matrixOperations.MatЧтобы отобразить представители пакета, введите:
doc clib.matrixOperationsЧтобы отобразить сигнатуры для функции пакета, щелкните ссылки для addMat, updateMatByX, и updateMatBySize.
Отображение информации о clib.matrixOperations.Mat классов, щелкните ссылку для Mat.
Протестируйте функции в интерфейсе. Для примера введите:
matObj = clib.matrixOperations.Mat; % Create a Mat object intArr = [1,2,3,4,5]; matObj.setMat(intArr); % Set the values to intArr retMat = matObj.getMat(5) % Display the values
retMat = 1×5 int32 row vector 1 2 3 4 5
build | clibgen.generateLibraryDefinition | summary