Маршалинг массива структур из .NET в C ++: когда выполняется копирование?

Рассмотрим такую ​​структуру, как System.Drawing.Point, с LayoutKind.Sequential и содержащую только примитивные члены.У меня есть массив таких структур C #.

Я передаю его (неуправляемой) функции C ++ через P / Invoke. На стороне C ++ есть соответствующее определение структуры (например, struct Point {int x, y;}; ). Функция принимает Point * arg.

У меня вопрос: в каких случаях среда CLR копирует данные, а в каких - просто закрепляет их? Переменные включают:

  • Тип массива: одномерный или прямоугольный
  • Определение функции в C # с использованием Point * или Point [] / Point [,]
  • с использованием исправлено (Point * pointer = array) или нет

Я хочу избежать копирования, потому что оно медленное.

9
задан Stefan Monov 16 December 2011 в 03:41
поделиться