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

Эта тема о файлах MEX, созданных с Матричным API C. Для получения информации о создании файлов MEX C++ смотрите MEX Applications Выбора.

стандартная программа Шлюза 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 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 команда.

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

| | | | |

Похожие темы