Передайте структуры и массивы ячеек в файл MEX на C

Передача структур и массивов ячеек в файлы 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]

Похожие темы