Этот пример создает интерфейс 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++ 2 017 компиляторов.
Идентифицируйте имена и пути к артефактам библиотеки 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