Преобразование массива является распространенной проблемой в C ++ / CLI и, следовательно, имеет элегантное решение: pin_ptr<>
. Используйте это так:
array<unsigned int> ^intParams;
// code that assigns a managed array to intParams
pin_ptr<unsigned int> intParamsPtr = &intParams [0];
// code that uses intParamsPtr as unsigned int*
Обратите внимание, что этот код не включает в себя копирование элементов. Он просто помещает указатель на начало управляемого массива и «закрепляет» его, поэтому его нельзя перемещать в памяти во время сбора мусора. К счастью, расположение целочисленных массивов - со знаком, без знака и с любым размером элемента - одинаково на управляемой и неуправляемой стороне, поэтому преобразование элементов не требуется.
Прикрепленный указатель действителен только в блоке, в котором он определен. Как только он выходит из области видимости (например, после закрывающей фигурной скобки), указатель автоматически становится недействительным. Нет необходимости избавляться от указателя.