Предположим свой файл 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
оставляют неприсвоенными.
Стандартная программа шлюза, func.c
, использует Матричные API-функции C, показанные в, Создают или Удаляют Массив, чтобы создать массивы MATLAB для ваших выходных аргументов. Это устанавливает plhs[0]
и plhs[1]
к указателям на недавно созданные массивы MATLAB. Это использует функции, которые, как показывают в Доступе к данным, извлекали ваши данные от ваших входных параметров prhs[0]
и prhs[1]
. Наконец, это вызывает вашу вычислительную процедуру, передавая указатели данных ввода и вывода как параметры функции.
MATLAB присваивает plhs[0]
C
и plhs[1]
к D
.
Цикл MEX C/C++
C матричный API | mexFunction (C)
| mxArray (C)