Вы делаете это почти правильно:
pin_ptr<Byte> pinPtrArray = &ManagedClass.ByteArray[ManagedClass.ByeArray->GetLowerBound(0)];
Marshal :: Copy не безопасно и не так быстро. Всегда используйте закрепленные указатели в управляемом C ++.
Изменить: Если вы хотите, вы можете проверить длину, чтобы убедиться, что memcpy не превысит границы, например:
if (arrayCount > ManagedClass.ByteArray.Length)
(throw Out of bounds copy exception)