В этом примере показано, как передавать строки функции MEX, построенной с помощью C Matrix API. Пример revord.c принимает символьный вектор и возвращает символы в обратном порядке.
Чтобы увидеть код, откройте revord.c в редакторе MATLAB ®.
Функция шлюза, mexFunction, создает строку C из входной переменной, prhs[0]. Путем выделения переменных типа mxArray из подпрограммы вычислений, revord, вы можете избежать внесения существенных изменений в исходный код C и C++.
Преобразование входного аргумента prhs[0] в строку в стиле Си input_buf.
input_buf = mxArrayToString(prhs[0]);
Выделение памяти для выходного аргумента, output_buf, строка в стиле Си.
output_buf = mxCalloc(buflen, sizeof(char));
Размер выходного аргумента эквивалентен размеру входного аргумента.
Вызовите подпрограмму вычислений, revord.
revord(input_buf, buflen, output_buf);
Преобразуйте выходные данные, output_buf, к mxArray и назначить plhs[0].
plhs[0] = mxCreateString(output_buf);
Не освобождайте память для этой переменной, поскольку она является выходным аргументом.
mxArrayToString функция, используемая для создания временного input_buf переменная, распределяет память; использовать mxFree для освобождения памяти.
mxFree(input_buf);
Выполните следующие команды из командной строки MATLAB.
Создайте пример.
mex -v revord.c
Вызовите функцию.
x = 'hello world';
y = revord(x)y = dlrow olleh