Вот функция:
public static int idx(int a, int b, int cols=500) {return a + b * cols; }
[DllExport("Set2DArray", CallingConvention = CallingConvention.StdCall)]
public static int Set2DArray([In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] double[] tab, int len)
{
//tab[idx(0, 0)] = 0;
//tab[idx(0, 1)] = 1;
//tab[idx(1, 0)] = 2;
//tab[idx(1, 1)] = 3;
//tab[idx(2, 0)] = 4;
//tab[idx(2, 1)] = 5;
MessageBox.Show(tab[idx(0, 0)].ToString());
MessageBox.Show(tab[idx(1, 0)].ToString());
MessageBox.Show(tab[idx(2, 0)].ToString());
MessageBox.Show(tab[idx(3, 0)].ToString());
MessageBox.Show(tab[idx(4, 0)].ToString());
MessageBox.Show(tab[idx(5, 0)].ToString());
MessageBox.Show(tab[idx(6, 0)].ToString());
return 0;
}
Вот способ доступа к функции DLL:
#import "Testme.dll"
int Set2DArray(double &t[7][],int i);
#import
double tab[7][500];
int OnInit()
{
tab[0][0] = 1;
tab[1][0] = 2;
tab[2][0] = 3;
tab[3][0] = 4;
tab[4][0] = 5;
tab[5][0] = 6;
tab[6][0] = 7;
Set2DArray(tab,6);
return(INIT_SUCCEEDED);
}
Я всегда получаю значение, как в первом MessageBox, как 1 и время отдыха 0.
Пожалуйста, дайте мне знать, каким образом я могу получить доступ к остальным значениям инициализированного массива.