Я создаю мекс-функцию 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
. Есть ли способ получить измерение строки параметров, чтобы избежать этого поведения и правильно обобщить для любого размера?