Этот раздел посвящен файлам MEX, созданным с помощью C Matrix API. Сведения о создании файлов C++ MEX см. в разделе Выбор приложений MEX.
Подпрограмма шлюза является точкой входа в файл 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 Matrix.
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.
Вычислительная программа содержит код для выполнения необходимых вычислений, реализованный в двоичном файле MEX. Хотя это и не требуется, рассмотрите возможность записи подпрограммы шлюза. mexFunction, чтобы вызвать вычислительную подпрограмму. Используйте mexFunction код в виде оболочки для проверки входных параметров и преобразования их в типы, требуемые вычислительной подпрограммой.
При написании отдельных шлюзовых и вычислительных подпрограмм их можно объединить в один исходный файл или в отдельные файлы. При использовании отдельных файлов файл, содержащий mexFunction должен быть первым исходным файлом, перечисленным в mex команда.
matlab::mex::ArgumentList | matlab::mex::Function | mexext | mexFunction | mxDuplicateArray | mxIsClass