Компоненты файла MEX на C

Эта тема посвящена файлам MEX, созданным с помощью API C Matrix. Для получения информации о создании файлов MEX см. раздел «Выбор приложений MEX».

mexFunction Gateway Стандартной программы

Этот gateway routine является точкой входа в файл MEX. Именно через эту стандартную программу MATLAB® обращается к остальным стандартным программам в файлах MEX. Имя стандартной программы шлюза: mexFunction. Он занимает место main функция в исходном коде.

Именование файла MEX

Имя исходного файла, содержащего 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 команда.

См. также

| | | | |

Похожие темы