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

стандартная программа Шлюза mexFunction

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.

Проверка вводов

Для списка функций, чтобы подтвердить входные параметры к вашим функциям, смотрите Матричную категорию API, Валидацию данных.

Функция 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.

Смотрите также

| | | | |

Похожие темы