Передача строкового массива в качестве параметра в s-функцию - PullRequest
2 голосов
/ 31 марта 2020

Я создаю мекс-функцию C ++, используя опцию S-function builder в simulink (matlab). Я успешно захватил строки, переданные в качестве параметра диалогового окна в Simulink как:

Диалоговое окно блока Simulink:

Parameter : uint8('This is a string')

C ++:

//Autogenerated part (mex.cpp)

#define PARAM_DEF0(S) ssGetSFcnParam(S, 0)
const int_T   p_width0   = mxGetNumberOfElements(PARAM_DEF0(S));
const uint8_T *Parameter = (const uint8_T *) mxGetData(PARAM_DEF0(S));

//mex_wrapper.cpp

std::string Parameter_s(Parameter , Parameter + p_width0);
mexPrintf("Output String: %s", Parameter_s.c_str())

При запуске программы это приводит к ожидаемому выводу: This is a string. Проблема возникает при передаче двухмерного вектора uint8 (массива строк).

Я пробовал следующее:

Диалоговое окно блока Simulink:

Parameter : uint8(['AAAA'; 'BBBB'])

C ++:

//This part remains the same, because it is autogenerated,
//and paremeters have no dimension property in the builder at least (mex.cpp)
//...
#define PARAM_DEF0(S) ssGetSFcnParam(S, 0)
const int_T   p_width0   = mxGetNumberOfElements(PARAM_DEF0(S));
const uint8_T *Parameter = (const uint8_T *) mxGetData(PARAM_DEF0(S));
//...
//mex_wrapper.cpp
//...
std::string Parameter_s(Parameter , Parameter + p_width0);
mexPrintf("Output String: %s", Parameter_s.c_str())
//...

Выходные данные в этом случае: ABABABAB. Есть ли способ получить измерение строки параметров, чтобы избежать этого поведения и правильно обобщить для любого размера?

...