Передача структур и массивов ячеек в файлы MEX подобна передаче любого другого типа данных, за исключением того, что сами данные в Matrix API C имеют тип mxArray
. На практике, mxGetField
(для структур) и mxGetCell
(для массивов ячеек) обратные указатели типа mxArray
. Вы обрабатываете указатели как любые другие указатели типа mxArray
. Для передачи данных, содержащихся в mxArray
для стандартной программы C используйте функцию API, такую как mxGetData
для доступа к нему.
Этот пример файла MEX использует API на C Matrix. Пример файла MEX на C++ с использованием MATLAB Data API см. в разделе phonebook.cpp
. Для получения информации о создании файлов MEX с этим API, смотрите MEX-функции C++.
Этот пример берёт m
-by- n
структура матрицы как входной параметр и возвращает новое 1
-by- 1
структура, содержащая следующие поля:
Текстовый вход генерирует m
-by- n
массив ячеек
Численный вход (некомплексные, скалярные значения) генерирует m
-by- n
вектор чисел с тем же идентификатором класса, что и вход, например int
, double
и так далее.
Чтобы создать этот пример, в командной строке введите:
mex phonebook.c
Чтобы увидеть, как работает эта программа, создайте эту структуру:
friends(1).name = 'Jordan Robert'; friends(1).phone = 3386; friends(2).name = 'Mary Smith'; friends(2).phone = 3912; friends(3).name = 'Stacy Flora'; friends(3).phone = 3238; friends(4).name = 'Harry Alpert'; friends(4).phone = 3077;
Вызовите файл MEX:
phonebook(friends)
ans = name: {1x4 cell } phone: [3386 3912 3238 3077]