Объясните смысл конструкции [In, Out] byte[] array

100
10 апреля 2021, 00:30

встретил такую конструкцию в кодяре: [In, Out] byte[] array Передается как параметр. Дайте пожалуйста четкое конкретно объяснение, зачем оно нужно, почему именно оно применяется, и где почитать подробнее.

Ни в шилде, ни в рихтере, ни в английских/русских артикула, ни на msdn'e я не нашел такого.

Answer 1

Обычно параметры с такими атрибутами передаются в неуправляемый код, с дополнительным атрибутом [MarshalAs(UnmanagedType.LPArray)], на тот случай, когда допустим необходимо получить длину неуправляемого массива первым вызовом (тогда параметр передается как null), а перед вторым вызовом. вам необходимо выделить буфер достаточной длины, и после этого передать в данный метод, с ссылкой на длину, т.е. то что вы получили при первом вызове с параметром null.

Таким образом, такой массив будет передан как указатель на указтель, и в случае передачи null, будет передан nullptr (он же 0 или IntPtr.Zero).

Забыл добавить, что переданная ссылка на массив, будет иметь, или не иметь значения после такого вызова.

READ ALSO
WPF Объединение ContextMenu разных контролов

WPF Объединение ContextMenu разных контролов

Есть два любых контролаОдин главный, второй дочерний

81
Гарантирует ли .NET при Select().ToList(), что порядок элементов не изменится?

Гарантирует ли .NET при Select().ToList(), что порядок элементов не изменится?

Допустим, есть List<SomeObject>, где SomeObject- это какой-то объект с десятком полей

96
Парсинг fb2 файла [закрыт]

Парсинг fb2 файла [закрыт]

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение

113
Как правильно повернуть часть объекта, чтобы она следила за другим объектом?

Как правильно повернуть часть объекта, чтобы она следила за другим объектом?

Создал объект состоящий из множества частей, как правильно повернуть одну из частей объекта, чтобы она следила за другим объектом, используя...

102