Эта тема о файлах MEX, созданных с Матричным API C. Для получения информации о создании файлов MEX C++ смотрите MEX Applications Выбора.
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 Ячейки или Структуры.
Для списка функций, чтобы подтвердить входные параметры к вашим функциям, смотрите Матричный 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