Маршаллинг C # зубчатого массива в C ++

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

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

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

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


person Projectile Fish    schedule 13.06.2011    source источник


Ответы (1)


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

person Alex F    schedule 13.06.2011
comment
fyi, раздел обновления stackoverflow.com/questions/53419367/ содержит подробную информацию об использовании этого ответа, в том числе о том, как прикрепить извлеченный строк к указателю внешнего зубчатого массива. он также включает в себя оператор dllimport и часть уравнения с сигнатурой функции C ++, которая была необходима для работы сортировки ввода и вывода неровного массива. - person myusrn; 23.11.2018