Эта тема посвящена файлам MEX, созданным с помощью API C Matrix. Для получения информации о создании файлов MEX см. раздел «Выбор приложений MEX».
Этот gateway routine является точкой входа в файл MEX. Именно через эту стандартную программу MATLAB® обращается к остальным стандартным программам в файлах MEX. Имя стандартной программы шлюза: mexFunction
. Он занимает место main
функция в исходном коде.
Имя исходного файла, содержащего mexFunction
- имя файла MEX и, следовательно, имя функции, которую вы вызываете в MATLAB.
Расширение файла двоичного файла MEX зависит от платформы. Вы находите расширение файла используя mexext
функция, которая возвращает значение для текущей машины.
Подпись для mexFunction
является:
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
Поместите эту функцию после вычислительной процедуры и любых других функций в исходный файл.
Эта таблица описывает параметры для mexFunction
.
Параметр | Описание |
---|---|
prhs | Массив входных параметров правой стороны. |
plhs | Массив выходных аргументов левой стороны. |
nrhs | Количество аргументов правой стороны или размер prhs массив. |
nlhs | Количество левых аргументов или размер plhs массив. |
Объявить prhs
и plhs
как тип mxArray *
, что означает, что они указывают на массивы MATLAB. Они являются векторами, которые содержат указатели на аргументы файла MEX. Ключевое слово const
, который изменяет prhs
, означает, что файл MEX не изменяет входные параметры.
Можно придумать имя prhs
как представляющий «параметры, правая сторона», то есть входные параметры. Точно так же plhs
представляет «параметры, левая сторона» или выходные параметры.
Входные параметры (найдены в prhs
массив) доступны только для чтения; не изменять их в файле MEX. Изменение данных в параметре входа может привести к нежелательным побочным эффектам.
Вы также должны позаботиться при использовании параметра входа, чтобы создать выход данные или любые данные, используемые локально в вашем файле MEX. Чтобы скопировать массив входа в локально определенную переменную, myData
, вызвать mxDuplicateArray
функция для создания копии массива входа. Для примера:
mxArray *myData = mxCreateStructMatrix(1,1,nfields,fnames); mxSetField(myData,0,"myFieldName",mxDuplicateArray(prhs[0]));
Для получения дополнительной информации см. раздел «Неправильное построение камеры или структуры mxArray».
Список функций для проверки входов функций см. в Matrix API на C.
mxIsClass
функция является общим способом тестирования mxArray
. Например, предположим, что ваш второй входной параметр (идентифицируется prhs[1]
) должна быть полная матрица вещественных чисел. Чтобы проверить это условие, используйте следующие операторы.
if(mxIsSparse(prhs[1]) || mxIsComplex(prhs[1]) || mxIsClass(prhs[1],"char")) { mexErrMsgIdAndTxt("MyToolbox:myfnc:nrhs", "input2 must be full matrix of real values."); }
Этот пример не является исчерпывающей проверкой. Можно также проверить на структуры, массивы ячеек, указатели на функцию и объекты MATLAB.
Этот computational routine содержит код для выполнения расчетов, которые вы хотите реализовать в двоичном файле MEX. Хотя это не требуется, рассмотрите запись стандартной программы шлюза, mexFunction
, для вызова вычислительной процедуры. Используйте mexFunction
код как оболочка для проверки входных параметров и преобразования их в типы, требуемые вычислительной процедурой.
Если вы записываете отдельные шлюзы и вычислительные процедуры, можно объединить их в один исходный файл или в отдельные файлы. Если вы используете отдельные файлы, файл, содержащий mexFunction
должен быть первым исходным файлом, перечисленным в mex
команда.
matlab::mex::ArgumentList
| matlab::mex::Function
| mexext
| mexFunction
| mxDuplicateArray
| mxIsClass