Я пишу код на С ++, который возвращает выходные данные функции Octave в среду Scilab.
Соответствующий код приведен ниже
//Pass values from Scilab to Octave
sciErr= getMatrixOfDouble(pvApiCtx, piAddr, &iRows, &iCols, &pdblReal);
Matrix matrix_double = Matrix (iRows,iCols);
for (r=0;r<iRows;r++)
{
for(c=0;c<iCols;c++)
{
matrix_double(r,c)=(pdblReal[r]+c);
}
}
in(i-2)=octave_value (matrix_double);
octave_value_list out = feval (pstData[0], in, 1);//Call Octave function
dim_vector d = (out(0).matrix_value().dims()); //Get dimensions of Octave output
//Return Octave output to Scilab
if(out(0).is_double_type())
{
poutput = (double*)malloc(sizeof(double) * d(0) * d(1));
for(int l = 0 ; l < d(0) ; l++)
{
for(int m = 0 ; m < d(1) ; m++)
{
poutput[l+d(0)*m]=(out(0).matrix_value ()(l,m));
}
}
}
sciErr=createMatrixOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1, d(0), d(1),poutput);
free(poutput);
AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
ReturnArguments(pvApiCtx);
На консоли Scilab ввод
-->a=[1 24 92; 59 28 211]
a =
1. 24. 92.
59. 28. 211.-->b=call_octave("transpose",a)
b =
1. 59.
2. 60.
3. 61.
Для любой функции Octave первая строка вывода верна. Последующие строки имеют 1 добавлен к предыдущей строке. Куда я иду не так?
Задача ещё не решена.