Опубликуйте интерфейс к библиотеке C++ Используя исходные файлы

Этот пример создает интерфейс MATLAB® к библиотеке C++, объявленной в заголовочном файле matrixOperations.hpp и заданный в исходном файле C++ matrixOperations.cpp. MATLAB предоставляет эти исходные файлы вам, чтобы использовать в этом примере. Файлы находятся в этой папке:

fullfile(matlabroot,'extern','examples','cpp_interface')

Этот пример создает совместно использованный файл библиотеки. Для примера, который использует совместно использованный файл библиотеки, предварительно созданный MATLAB, смотрите, Публикуют Интерфейс к Разделяемой Библиотеке C++ по Windows.

Проверьте выбранный компилятор C++

Можно использовать любой компилятор 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.

  1. Ищите файл определения setMat метод и некомментарий операторы, задающие его. Задавать src аргумент, в этом defineArgument оператор, замена <SHAPE> с "len".

    defineArgument(setMatDefinition, "src", "clib.array.matrixOperations.Int", "input", "len");
  2. В методе getMat, задайте RetVal выведите, заменив <SHAPE> с "len".

    defineOutput(getMatDefinition, "RetVal", "int32", "len");
  3. В методе copyMat, задайте dest аргумент, заменяя <SHAPE> с "len".

    defineArgument(copyMatDefinition, "dest", "clib.array.matrixOperations.Int", "input", "len");
  4. В функциональном addMat, задайте mat аргумент в функциональном addMat заменяя <SHAPE> с 1.

    defineArgument(addMatDefinition, "mat", "clib.matrixOperations.Mat", "input", 1);
  5. В функциональном 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)

Интерфейс сборки и добавляет к пути MATLAB

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

Смотрите также

| |

Похожие темы