Этот пример использует двухступенчатый процесс сборки, который генерирует файл определения для вас, чтобы использовать, чтобы задать определенные входные параметры. Пример показывает, как задать аргументы, характерные для содержимого библиотеки. MATLAB® обеспечивает библиотеку C++ и заголовочные файлы для вас, чтобы использовать в этом примере. Файлы библиотеки находятся в этой папке и ее подпапках.
fullfile(matlabroot,'extern','examples','cpp_interface')
Этот пример вызывает clibgen.generateLibraryDefinition
и руководства вы посредством определения входных параметров.
Создайте папку издателя
Создайте папку для файла интерфейса MATLAB.
pubPath = 'H:\Documents\MATLAB\publisher\matrixexample'; if ~isdir(pubPath) mkdir(pubPath) end cd(pubPath)
Идентифицируйте файлы библиотеки C++
Идентифицируйте имена и пути к артефактам библиотеки C++.
productPath = fullfile(matlabroot,'extern','examples','cpp_interface'); libPath = fullfile(productPath,'win64','mingw64'); % Header file name hppFile = 'matrixOperations.hpp'; % Full path to folder containing all header files hppPath = productPath; % Full path to folder containing include files iPath = hppPath; % Library file name libFile = 'matrixOperations.lib';
Назовите интерфейс
myPkg = 'myPkg';
Вызовите clibgen.generateLibraryDefinition
v = true; clibgen.generateLibraryDefinition(fullfile(hppPath,hppFile),... 'IncludePath', iPath,... 'Libraries', fullfile(libPath,libFile),... 'PackageName', myPkg,... 'Verbose',v)
Using MinGW64 Compiler (C++) compiler. Generated definition file definemyPkg.mlx and data file 'myPkgData.xml' contain definitions for 10 constructs supported by MATLAB. 5 constructs require additional definition. To include these constructs in the interface, edit the definitions in definemyPkg.mlx. Build using build(definemyPkg).
Просмотрите функциональность
Несмотря на то, что некоторые построения требуют дополнительного определения, можно просмотреть доступную функциональность. Если эта функциональность достаточна для ваших потребностей, то можно продолжить шаг Интерфейса Библиотеки Сборки. В противном случае продолжите шаг, чтобы задать недостающие построения.
summary(definemyPkg)
MATLAB Interface to myPkg1 Library Class clib.myPkg1.Mat Constructors: clib.myPkg1.Mat() clib.myPkg1.Mat(clib.myPkg1.Mat) Methods: uint64 getLength() No Properties defined Functions clib.myPkg1.updateMatByX(clib.myPkg1.Mat,int32)
Чтобы задать недостающие построения, щелкните по ссылке в generateLibraryDefinition
выходной сигнал, чтобы отредактировать определения в definemyPkg.mlx
. Для получения информации о редактировании этого файла и примеров для определения аргументов, смотрите, Задают Интерфейс MATLAB к Библиотеке C++.
Ищите файл определения setMat
метод и некомментарий операторы, задающие его. Задавать src
аргумент, в этом defineArgument
оператор, замена <DIRECTION>
с "input"
и <SHAPE>
с "len"
.
defineArgument(setMatDefinition, "src", "int32", "input", "len");
В методе getMat
, задайте RetVal
выведите, заменив <SHAPE>
с "len"
.
defineOutput(getMatDefinition, "RetVal", "int32", "len");
В методе copyMat
, задайте dest
аргумент, заменяя <DIRECTION>
с "output"
и <SHAPE>
с "len"
.
defineArgument(copyMatDefinition, "dest", "int32", "output", "len");
В функциональном addMat
, задайте mat
аргумент в функциональном addMat
заменяя <SHAPE>
с 1
.
defineArgument(addMatDefinition, "mat", "clib.myPkg.Mat", "input", 1);
В функциональном updateMatBySize
, задайте arr
аргумент, заменяя <DIRECTION>
с "input"
и <SHAPE>
с "len"
.
defineArgument(updateMatBySizeDefinition, "arr", "int32", "input", "len");
Сохраните и закройте файл определения.
Создайте файл интерфейса MATLAB myPkgInterface.dll
.
build(definemyPkg)
Building interface file 'myPkgInterface.dll'. Interface file 'myPkgInterface.dll' built in folder 'H:\Documents\MATLAB\publisher\matrixexample\myPkg'. To use the library, add the interface file folder to the MATLAB path.
Обязательно щелкните по ссылке в сообщении, чтобы добавить интерфейсный файл в путь.
Чтобы протестировать интерфейс, смотрите Вызов функций в Windows Interface на C++ Разделяемая Библиотека.
clibgen.generateLibraryDefinition