Предлагает пользователю ввести число в коде MEX

Интересно, есть ли способ предложить пользователю ввести целое число в коде MEX.

Что-то похожее на ввод в MATLAB или scanf в C.

Я слышал о mexCallMATLAB и его использовании в

 str = mxCreateString("Enter extension:  ");

   mexCallMATLAB(1,&new_number,1,&str,"input");

Однако я не очень понимаю, в чем смысл mxCreateString и что делает &str. Я буду очень признателен, если кто-нибудь может немного рассказать об этом или дать мне другую технику, чтобы побудить пользователя вводить данные.


person user59419    schedule 28.06.2016    source источник


Ответы (1)


Начнем с самого начала. mexCallMATLAB вызывает функцию MATLAB, определяемую пользователем функцию MATLAB или файл MEX внутри МЭК код. Объявление функции таково, что:

int mexCallMATLAB(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[], 
                  const char *functionName);

Подробные параметры:

  1. nlhs: общее количество выходных параметров, которые, как ожидается, будут получены функцией MATLAB или MEX.
  2. *plhs[]: массив указателей, каждый элемент которого является указателем на выходной аргумент.
  3. nrhs: Общее количество входных параметров, которое, как ожидается, будет принимать функция MATLAB или MEX.
  4. *prhs[]: Массив указателей, каждый элемент которого является указателем на входной аргумент.
  5. 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