C# Показано неверное значение массива DLL - PullRequest
0 голосов
/ 28 мая 2020

Вот функция:

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.

Пожалуйста, дайте мне знать, каким образом я могу получить доступ к остальным значениям инициализированного массива.

...