Выделение C # Jagged Array для C ++ - PullRequest
4 голосов
/ 13 июня 2011

Я пытаюсь маршалировать двумерный массив C # (double[][] jaggedArray) в dll C ++, где я указал принимающую переменную как double**.

Однако я получаю сообщение:

Нет поддержки маршалинга вложенные массивы.

Если не считать выравнивания зубчатого массива, есть ли способ использовать зубчатые массивы из C # в DLL C ++?

1 Ответ

3 голосов
/ 13 июня 2011

Используя низкоуровневые методы класса Marshal, можно распределить любой тип в неуправляемую память. Например, для каждого массива double [] в jaggedArray выделите неуправляемый блок памяти с помощью Marshal.AllocHGlobal и скопируйте в него элементы массива, используя метод Marshal.Copy (Double [], Int32, IntPtr, Int32). AllocHGlobal возвращает тип IntPtr, который может быть передан методу C ++ в качестве указателя, в этом случае удваивается *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...