2014-02-06 4 views
2

Я хочу, чтобы мобилизовывать двумерный массивМаршалинг двумерный массив

int [10][20] //const dimensions size 

из DLL C++ в C# код. Для этого есть автоматический маршалер? Невозможно найти хорошее решение для такой простой задачи.

public int[,] _operators; 

Дает неопределенные значения. Да, я могу сделать это одномерным только для маршалинга, а затем снова прочитать его до 2 dimsions в C#, но есть ли простой способ?

=================

Лучший способом я думаю, что это использование указателя, как это:

  const int 1dSize = 10; 
      const int 2dSize = 10; 
      var ret = new int[1dSize, 2dSize]; 

     unsafe 
     { 
      int* ptrOnArray = NativeLibPrototypes.Get2DArrayPtr(); 
      for (int i1 = 0; i1 < 1dSize; i1++) 
      { 
       for (int i2 = 0; i2 < 2dSize; i2++) 
       { 
        ret[i1, i2] = *ptrOnArray; 
        ptrOnArray++; 
       } 
      } 
     } 

ответ

1

попробовать

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 200)] 
int[] _operators; 

Размер должен быть количеством элементов в вашем массиве.

Проверить это Default Marshaling for Arrays

+0

Не работает, не определено –

+0

, где вы получите неопределенный ?? – Sameer

+0

Когда я смотрю в отладчике _операторы, я вижу "?" на каждом элементе _operators [0, 0] дает мне индекс вне диапазона ... (_ operator - это поле класса C++, теперь я комментирую все, кроме _операторов) –

Смежные вопросы