2016-06-28 2 views
1

Интересно, есть ли в любом случае приглашение ввести целое число в код MEX.Запрос пользователю ввести номер в код MEX

Нечто похожее на то, что вход в MATLAB или scanf в С.

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

str = mxCreateString("Enter extension: "); 

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

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

ответ

4

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