Установите и получите переменный MATLAB из MEX

MEX-функции могут помещать переменные в MATLAB® базовые и глобальные рабочие области во время выполнения MEX-функции. MEX-функции могут получить переменные из основы MATLAB и глобальных рабочих областей во время выполнения MEX-функции.

Чтобы поместить переменные в основу MATLAB или глобальную рабочую область из MEX-функций, используйте функцию matlab:: engine:: MATLABEngine:: setVariable.

Чтобы получить переменные из основы MATLAB или глобальной рабочей области и привести их в MEX-функцию, используйте функцию matlab:: engine:: MATLABEngine:: getVariable.

Получите переменную из рабочего пространства MATLAB

Предположим, что существует переменная с именем result в базовом рабочем пространстве MATLAB. Эта переменная имеет тип double.

result =  1^3 + 5^3 + 3^3;

Чтобы получить result переменная из рабочего пространства MATLAB, вызов getVariable, которая возвращает переменную в виде matlab::data::Array.

#include "mex.hpp"
#include "mexAdapter.hpp"

using matlab::mex::ArgumentList;
using namespace matlab::engine;
using namespace matlab::data;

class MexFunction : public matlab::mex::Function {
    ArrayFactory factory;
    std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine();
public:
    void operator()(ArgumentList outputs, ArgumentList inputs) {
        Array result = matlabPtr->getVariable(u"result");
        double mexResult = std::move(result[0]);
    }
};

The result переменная является общей копией result переменная в рабочем пространстве MATLAB. Использование std::move при назначении result в MEX-функция к собственному double переменная mexResult отменяет изменение значения переменной в рабочем пространстве MATLAB.

Поместите переменную в рабочее пространство MATLAB

MEX-функции могут помещать переменные в основу MATLAB или глобальную рабочую область. Если переменная с таким же именем существует в указанной рабочей области, setVariable перезаписывает его.

Например, можно сделать переменную доступной из глобальной рабочей области MATLAB, чтобы любая функция MATLAB могла задать эту глобальную переменную.

Эта MEX-функция создает глобальную переменную mexGlobal. Значение этой переменной 153.

#include "mex.hpp"
#include "mexAdapter.hpp"

using matlab::mex::ArgumentList;
using namespace matlab::engine;
using namespace matlab::data;

class MexFunction : public matlab::mex::Function {
    ArrayFactory factory;
    std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine();
public:
    void operator()(ArgumentList outputs, ArgumentList inputs) {
        Array val = factory.createScalar(153.0);
        matlabPtr->setVariable(u"mexGlobal", val, WorkspaceType::GLOBAL);
    }
};

Для доступа к глобальной переменной из функций MATLAB используйте global ключевое слово, определяющее переменную как глобальную в рабочей области функции.

function testMexGlobal
   global mexGlobal
   localVar = 1^3 + 5^3 + 3^3;
   if localVar == mexGlobal
      disp('Global found')
   end
end

Глобальные переменные являются общими для всех функций, которые объявляют переменную глобальной. Любое изменение значения на эту переменную в любой функции видно всем функциям, которые объявляют ее глобальной.

Установите и получите код примера переменной

Для полного примера, который использует matlab:: engine:: MATLABEngine:: getVariable, загрузите эти два файла и следуйте инструкциям в файлах, чтобы создать и запустить MEX-функцию.

mexgetarray.cpp и mexgetarray.hpp.

См. также

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте