В отличие от Массива, у COMSafeArray индексы измерения не обязаны начинаться с 0 — нижнюю границу можно задать явно при создании (см. Конструкторы), в том числе отрицательную.
| Метод | Параметр | Возвращает |
|---|---|---|
GetDimensions() | — | Число — количество измерений массива |
GetUpperBound(НомерИзмерения) | НомерИзмерения (Число, необязательный, по умолчанию 0) | Число — верхняя граница указанного измерения |
GetLowerBound(НомерИзмерения) | НомерИзмерения (Число, необязательный, по умолчанию 0) | Число — нижняя граница указанного измерения |
У всех трёх — только английское имя, русского аналога Измерения/ВГраница для COMSafeArray не существует, в отличие от Массива.
НомерИзмерения нумерует сами измерения массива, а не элементы внутри измерения, и с нуля: 0 — старшее (первое) измерение, 1 — следующее и так далее. У одномерного массива поэтому единственное измерение — 0, а не 1.
СМассив = Новый COMSafeArray("VT_R8", 4);
СМассив.GetDimensions(); // 1
СМассив.GetLowerBound(0); // 0
СМассив.GetUpperBound(0); // 3Для многомерного — тот же принцип, но с номером конкретного измерения:
СМассив = Новый COMSafeArray("VT_BSTR", 3, 2); // 3 на 2
СМассив.GetDimensions(); // 2
СМассив.GetLowerBound(0); // 0
СМассив.GetUpperBound(0); // 2
СМассив.GetLowerBound(1); // 0
СМассив.GetUpperBound(1); // 1Номер измерения меньше 0 или больше максимального — платформа не выбрасывает исключение, а выводит сообщение «Значение индекса выходит за границы диапазона» и ничего не делает.
Перебор элементов — циклом от GetLowerBound() до GetUpperBound() включительно для каждого измерения, Для Каждого по COMSafeArray не работает, как по обычной коллекции:
Для Индекс = СМассив.GetLowerBound(0) По СМассив.GetUpperBound(0) Цикл
// СМассив.GetValue(Индекс)
КонецЦикла;Само чтение и запись значений по индексам — Чтение и запись значений.