У меня есть структура от 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)
}
Вы, вероятно, ищете mxGetFieldByNumber
. Также есть полный пример передачи структур в MEX-файлы, поставляемые с MATLAB, см. эта документация от Mathworks. Вы можете загрузить пример в MATLAB следующим образом:
edit([matlabroot '/extern/examples/refbook/phonebook.c']);
РЕДАКТИРОВАТЬ: Там также mxGetField
который позволяет вам получить доступ к полю, используя его имя.
EDIT2: чтобы преобразовать результат из mxGetField
к строке C вы можете использовать mxArrayToString
. Обратите внимание, что вам нужно освободить память строки после того, как вы ее использовали. Ты можешь использовать mxIsChar
проверить, содержит ли поле символьный массив MATLAB.
Других решений пока нет …