Начнем с самого начала. mexCallMATLAB
вызывает функцию MATLAB, определяемую пользователем функцию MATLAB или файл MEX внутри МЭК код. Объявление функции таково, что:
int mexCallMATLAB(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[],
const char *functionName);
Подробные параметры:
nlhs
: общее количество выходных параметров, которые, как ожидается, будут получены функцией MATLAB или MEX.
*plhs[]
: массив указателей, каждый элемент которого является указателем на выходной аргумент.
nrhs
: Общее количество входных параметров, которое, как ожидается, будет принимать функция MATLAB или MEX.
*prhs[]
: Массив указателей, каждый элемент которого является указателем на входной аргумент.
functionName
: строка C, содержащая имя функции.
Обратите внимание, что *plhs[]
и *prhs[]
должны быть массивом указателей на переменные типа MEX. Это важно, потому что это будет использоваться для понимания того, что произойдет дальше. Используя приведенную выше логику, взгляните на вызов mexCallMATLAB
, на который вы ссылались:
mexCallMATLAB(1,&new_number,1,&str,"input");
Как мы видим, функция для вызова в MATLAB — это функция input
, которая является функцией MATLAB, где входным аргументом является строковая подсказка, которая используется для отображения в командном окне, прежде чем принимать ввод от пользователя и сохранять его в выходная переменная. Обратите внимание, что ожидается числовое выражение, обычно число или некоторая операция над числами.
Пример вызова будет выглядеть так:
out = input('Enter a number: ');
Таким образом, Enter a number:
будет отображаться в командном окне, и любое введенное вами число будет сохранено в переменной out
.
При использовании mexCallMATLAB
вы делаете то же самое, что и выше, но вызываете это в коде MEX. В этой функции есть один входной аргумент и один ожидаемый выходной аргумент. Второй параметр технически является указателем на выходной аргумент, где это будет массив всего из одного элемента. Таким образом, вывод input
будет сохранен в переменной new_number
, которая будет содержать число. Переменная str
представляет собой строку MEX, созданную с использованием mxCreateString
. Вы должны создать строку MEX, поскольку помните, что ожидаемые входные данные для входных переменных для функции, вызываемой через mexCallMATLAB
, должны быть переменными MEX. Следовательно, str
является строкой MEX, а &str
будет указателем на строку MEX. Технически это также массив указателей с одним элементом.
Как только эта функция вызывается, вы вводите входное число в командное окно MATLAB, и, таким образом, число отправляется обратно в MEX и сохраняется в new_number
в вашем коде MEX.
Это кажется элегантным способом получить переменную из командного окна MATLAB в MEX. Я не сталкивался с каким-либо другим методом из того, что я видел в своем опыте с MEX, так что продолжайте использовать его!
person
rayryeng
schedule
28.06.2016