Доступ к Matlab Struct из mex

У меня есть структура от Matlab, переданная в mex.
Это передано правильно, я проверил это с помощью mxGetClassName (mxArray_pointer_carry_struct), который возвращает структура как тип класса. Структура имеет 15 полей и соответствующие им свойства, все 30 строк (15 имен_свойств, 15 значений_свойств).

Я могу получить доступ к именам свойств, используя mxGetFieldNameByNumber (mxArray_pointer_carring_struct, index);

Как я могу получить доступ к значениям свойств?

Код, который я должен сделать выше, выглядит следующим образом:

extract_settings(const mxArray *p)
{
mwIndex j = 1;
const char *property;
mexPrintf("\nInput Arg %i is of type:%s\n",j,mxGetClassName(p));
for(int i = 0;i<=14;i++)
{
property = mxGetFieldNameByNumber(p, i);  %gets property names
mexPrintf("%s-- \n",property); %Displays 15 property names
}
}

Моя структура выглядит следующим образом:

{
TRIGGER_POLARITY : LEVEL_LOW
EDGE : EDGE_RISING
.
.
. (15 elements as of now)
}

2

Решение

Вы, вероятно, ищете mxGetFieldByNumber. Также есть полный пример передачи структур в MEX-файлы, поставляемые с MATLAB, см. эта документация от Mathworks. Вы можете загрузить пример в MATLAB следующим образом:

edit([matlabroot '/extern/examples/refbook/phonebook.c']);

РЕДАКТИРОВАТЬ: Там также mxGetField который позволяет вам получить доступ к полю, используя его имя.

EDIT2: чтобы преобразовать результат из mxGetField к строке C вы можете использовать mxArrayToString. Обратите внимание, что вам нужно освободить память строки после того, как вы ее использовали. Ты можешь использовать mxIsChar проверить, содержит ли поле символьный массив MATLAB.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]