Вы можете закрепить массивы так же, как вы прикрепляете строки, например, для байта []:
pin_ptr<Byte> ptrBytes = &myArray[myArray->GetLowerBound(0)];
ptrBytes теперь можно использовать как символ без знака *
Вы можете закрепить отдельные переменныетоже из C #, например, с параметром, который ссылается на int и называется int% ival:
pin_ptr<int> pInt = &ival;
pInt теперь можно использовать как int *
Вы можетесоздайте массивы с помощью gcnew, например, чтобы создать массив байтов для возврата в C #:
array<Byte>^ streambuf = gcnew array<Byte>(bufSize+16);
Теперь вы можете заполнить его streambuf [index], переупаковывая массив C ++ в цикле, или вы можете закрепитьэто и сделать memcpy, прежде чем вернуть его в C #.
Я обычно не возвращаю структуры.Я обычно определяю каждый параметр в оболочке функции C ++ / CLI.Например, если бы структура имела два целых числа и строку, я бы сделал каждый параметр параметром с ключевым словом ref (% в C ++ / CLI, например, int% ival).если вам нужно вернуть большое количество значений, проще всего вернуть класс, созданный с помощью gcnew, а не struct.
Использование небезопасного кода - это то, что нужно, если вы пытаетесь ускорить доступ к массиву и ваш C #код будет простым.Если у вас уже есть код C ++, и он использует STL, и он очень сложный, и вы не хотите его переписывать, особенно если у вас много арифметики и приведения указателей, придерживайтесь оболочки C ++ / CLI.