Предположим, ваш файл MEX myFunction
имеет два входных параметров и один выходной аргумент. MATLAB® синтаксис [X] = myFunction(Y, Z)
. Вызов myFunction
из MATLAB введите:
X = myFunction(Y, Z);
Вызовы интерпретатора MATLAB mexFunction
, стандартную программу шлюза, в myFunction
, со следующими аргументами:
Ваш вход prhs
, двухэлементный массив (nrhs = 2
). Первый элемент является указателем на mxArray
именованные Y
и второй элемент является указателем на mxArray
именованные Z
.
Ваш выход plhs
, одноэлементный массив (nlhs = 1
) где один элемент является null
указатель. Значение параметра plhs
ничто не указывает, потому что выход X
не создается до выполнения стандартной подпрограммы.
Шлюз стандартной программы создает массив выхода и устанавливает на него указатель plhs[0]
. Если стандартная программа не присваивает значение plhs[0]
но вы присваиваете выходу значение функции, когда вызываете ее, MATLAB генерирует ошибку.
Примечание
Можно вернуть выход значение, даже если nlhs = 0
, что соответствует возвращению результата в ans
переменная.
Следующая схема цикла MEX показывает, как входы вводят файл MEX, какие функции выполняет стандартная программа шлюза и как выходы возвращаются в MATLAB.
В этом примере синтаксис файла MEX func
является [C, D] = func(A,B)
. На рисунке вызов func
MATLAB передает переменные A
и B
в ваш файл MEX. C
и D
остаются неназначенными.
Шлюз стандартной программы использует mxCreate*
функции для создания массивов MATLAB для выходных аргументов. Он устанавливает plhs[0]
и plhs[1]
на указатели на вновь созданные массивы MATLAB. Он использует mxGet*
функции для извлечения данных из входных параметров prhs[0]
и prhs[1]
. Наконец, это вызывает вашу вычислительную процедуру, передавая входным и выходным данным указатели как параметры функции.
MATLAB присваивает plhs[0]
на C
и plhs[1]
на D
.
Цикл MEX на языке ФОРТРАН