Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.
Las funciones MEX pueden poner variables en los espacios de trabajo base y globales durante la ejecución de la función MEX.MATLAB® Las funciones MEX pueden obtener variables de los espacios de trabajo base y globales durante la ejecución de la función MEX.MATLAB
Para poner las variables en el espacio de trabajo base o global de las funciones MEX utilice la función.MATLABmatlab::engine::MATLABEngine::setVariable
Para obtener variables desde el espacio de trabajo base o global y llevarlos a una función MEX, utilice la función.MATLABmatlab::engine::MATLABEngine::getVariable
Supongamos que hay una variable denominada en el área de trabajo base.result
MATLAB Esta variable es de tipo.double
result = 1^3 + 5^3 + 3^3;
Para obtener la variable del área de trabajo, llame, que devuelve la variable como un.result
MATLABgetVariable
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]); } };
La variable es una copia compartida de la variable en el espacio de trabajo.result
result
MATLAB El uso al asignar en la función MEX a la variable nativa no comparte el valor con la variable en el espacio de trabajo.std::move
result
double
mexResult
MATLAB
Las funciones MEX pueden poner variables en el espacio de trabajo base o global.MATLAB Si existe una variable con el mismo nombre en el espacio de trabajo especificado, sobrescribirá.setVariable
Por ejemplo, puede hacer que una variable esté disponible desde el espacio de trabajo global para que cualquier función pueda definir esta variable global.MATLABMATLAB
Esta función MEX crea una variable global llamada.mexGlobal
El valor de esta variable es.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); } };
Para acceder a la variable global desde funciones, utilice la palabra clave para definir la variable como global en el espacio de trabajo de la función.MATLABglobal
function testMexGlobal global mexGlobal localVar = 1^3 + 5^3 + 3^3; if localVar == mexGlobal disp('Global found') end end
Las variables globales se comparten entre todas las funciones que declaran la variable como global. Cualquier cambio de valor a esa variable, en cualquier función, es visible para todas las funciones que la declaran como global.
Para obtener un ejemplo completo que utiliza, descargue estos dos archivos y siga las instrucciones de los archivos para compilar y ejecutar la función MEX.matlab::engine::MATLABEngine::getVariable