Сначала нужно выделить массив с 3 указателями, которые можно сделать с помощью класса:
class Pointer3
{
IntPtr p1, p2, p3;
}
, затем вам нужно определить строку с помощью класса:
class Row3
{
float a, b, c;
}
все это в C #.тогда вам нужно выделить их:
Row3 row1, row2, row3;
// todo: init values
Pointer3 mat;
// allocate place for the rows in the matrix
mat.p1 = Marshal.AllocHGlobal(sizeof(Row3));
mat.p2 = Marshal.AllocHGlobal(sizeof(Row3));
mat.p3 = Marshal.AllocHGlobal(sizeof(Row3));
// store the rows
Marshal.StructureToPtr(row1, mat.p1, false);
Marshal.StructureToPtr(row2, mat.p2, false);
Marshal.StructureToPtr(row3, mat.p3, false);
// allocate pointer for the matrix
IntPtr matPtr = Marshal.AllocHGlobal(sizeof(Pointer3));
// store the matrix in the pointer
Marsha.StructureToPtr(mat, matPtr, false);
Теперь можно безопасно вызывать функцию, используя matPtr
в качестве матрицы.
Чтобы получить значения из модифицированной матрицы:
Marshal.PtrToStructure(matPtr, mat);