Категории
Хирургия
Void mexFunction( просмотров - 203
int nlhs, /* количество выходных параметров */
mxArray *plhs[],/*массив указателей на вых.параметры*/
int nrhs, /* количество входных параметров */
/**/
const mxArray *prhs[]/*массив указ-ей на вход.пар-ры */
);
Отметим, что в английской компьютерной литературе входные и выходные параметры называются "left hand side parameters" (параметры слева от знака присваивания) и "right hand side parameters" (параметры справа от знака присваивания). Сокращения этих названий вошли в имена параметров интерфейсной функции.
Рассмотрим структуру mxArray. Помимо прочих, она содержит следующие поля:
- имя переменной среды MATLAB в текстовом виде,
- размерность данной переменной,
- ее тип,
- является ли она вещественной или комплексной (в случае комплексной переменной создаются отдельно вектора вещественной и мнимой частей),
- является ли переменная разреженной матрицей, так как разреженные матрицы имеют отличную от обычных схему хранения данных.
Матрицы (двумерные массивы) являются подмножеством mxArray, для чего в этой структуре предусмотрены поля pr (вещественная часть) и pi (мнимая часть). Каждое из этих полей представляет собой одномерный массив, содержащий элементы матриц (double-числа) поколоночно - сначала все элементы первого столбца матрицы, затем - второго и т.д.
Так как извлечение требуемого типа данных для обработки напрямую из общей структуры может быть сложным (из-за наличия разного рода флажков, типов, размерностей и т.п.), то MATLAB содержит специальную библиотеку вспомогательных функций, облегчающую работу с тем или иным типом данных внутри расширения MATLAB. Все функции этой библиотеки, работающие с массивом mxArray, имеют префикс mx (напр. mxGetPr()).
Другой набор функций в этой же библиотеке имеет префикс mex (напр. mexPrintf()). В отличие от предыдущих, они осуществляют ту или иную операцию в самой среде MATLAB, к примеру - печатают строку текста. Никакая из этих функций не осуществляет прямого доступа к полям mxArray.
Оба указанных набора функций содержатся в динамических библиотеках, находящихся в каталоге \matlab\bin. Эти библиотеки следует подключить к проекту. Не забывайте также включать заголовочный файл mex.h во все исходные файлы вашей программы, в которых используются вызовы функций библиотеки MATLAB или ее типы данных.
В заключение, еще раз подчеркнем, что mxArray в состоянии описать любую переменную MATLAB, что и дает возможность написать расширение, работающее с любым типом данных.
Настройка среды для сборки проекта
Перед началом создания проекта для будущего MEX-файла нужно убедиться в правильности настройки среды (переменных окружения) компилятора, который будет использоваться для компиляции динамической библиотеки.