У COMSafeArray нет обращения через квадратные скобки, как у Массива (Массив[Индекс]) — только через методы GetValue()/SetValue(), оба существуют только под английским именем.
| Метод | Параметры | Возвращает |
|---|---|---|
GetValue(Индекс0, Индекс1, ...) | по одному индексу на каждое измерение, от старшего | значение элемента |
GetValue(Индексы) | Индексы — Массив индексов, от старшего | значение элемента |
SetValue(Индекс0, Индекс1, ..., Значение) | индексы + Значение последним параметром | — |
SetValue(Индексы, Значение) | Индексы — Массив индексов, + Значение | — |
СМассив = Новый COMSafeArray("VT_I4", 3);
СМассив.SetValue(0, 10);
СМассив.SetValue(1, 20);
СМассив.SetValue(2, 30);
СМассив.GetValue(1); // 20Для многомерного — индекс на каждое измерение, в том же порядке, что и при создании (от старшего к младшему):
СМассив = Новый COMSafeArray("VT_BSTR", 2, 2); // 2 на 2
СМассив.SetValue(0, 0, "A1");
СМассив.SetValue(0, 1, "B1");
СМассив.SetValue(1, 0, "A2");
СМассив.SetValue(1, 1, "B2");Индексы можно передать и одним Массивом вместо списка через запятую — удобно, когда число измерений заранее неизвестно:
Индексы = Новый Массив;
Индексы.Добавить(1);
Индексы.Добавить(0);
СМассив.GetValue(Индексы);Значение, не соответствующее заявленному при создании ТипЭлемента (кроме VT_VARIANT), вызовет исключение при SetValue().
Выгрузить() — весь массив целиком
Массив = СМассив.Выгрузить();Единственный метод COMSafeArray, у которого есть русское имя (Unload() — по-английски). Создаёт обычный Массив 1С и копирует туда всё содержимое — для многомерного COMSafeArray элементами результата будут вложенные массивы, как у обычного многомерного Массива 1С. Не нужно вручную перебирать GetLowerBound()/GetUpperBound(), если нужен именно весь массив целиком.