Начнем с начала. mexCallMATLAB
вызывает функцию MATLAB, пользовательскую функцию MATLAB или MEX-файл в коде 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, поэтому продолжайте использовать его!