Массивы MOF
Массив — это индексированные списки значений данных, которые имеют один и тот же тип данных, на который можно ссылаться. Помимо строковых и числовых массивов MOF поддерживает массивы внедренных объектов и ссылок.
Следующие правила определяют массив MOF:
Квадратные скобки, используемые после идентификатора свойства, указывают массив в определении класса.
Class ArrayDataSample1 { string strArray1[]; };
Все массивы должны быть одномерными.
Массивы могут быть несвязанными или иметь явный размер.
Class MyClass { sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk DiskArray1[]); sint32 MyMethod2 ([in, id(0)] Win32_LogicalDisk DiskArray2[32]); };
WMI реализует привязанные и несвязанные массивы как структуры SAFEARRAY, что позволяет WMI изменять размеры массивов во время выполнения. При объявлении массива с явным размером WMI сохраняет размер в качестве квалификатора и обрабатывает размер как предлагаемый максимальный размер. Однако при необходимости WMI может расширить размер. Изменение явного размера не влияет на фактические данные.
Массивы инициализированы путем указания значений соответствующего типа в разделенном запятыми списке.
Class ArrayDataSample2 { [key] string s; string strArray2[] = {"hello", "there"}; sint32 dwArray[] = {1,2,3}; };
Массив ссылок объявляется как массив строк пути объекта.
При объявлении строки пути объекта не помещайте пробелы между элементами пути объекта. В следующем примере описывается объявление ссылки на путь к объекту.
Class ClassWithRefArray { [key] string s; object ref refArray[]; }; instance of ClassWithRefArray { s = 23; refArray = {"Disk.Name=\"C:\"", "Disk.Name=\"E:\""}; };
Массив можно использовать в качестве параметра для метода, но не в качестве возвращаемого значения для входного или выходного параметра.
Все элементы в массиве создаются в виде значений одного типа.
Если элементы массива относятся к типу объекта, можно поместить любой тип объекта в массив. С другой стороны, если объявить определенный тип объекта, WMI разрешает только объекты этого класса или подкласса в массиве. В следующих примерах показаны объявления массива, которые включают использование типа объекта.
Class EmbedClass { [key] sint32 PropOfClass; }; Class ArrayDataClass { [key] string s; string strArray1[]; string strArray2[] = {"hello", "there"}; sint32 dwArray[] = {1,2,3}; EmbedClass objArray[]; }; instance of ArrayDataClass { s = "keyStuff"; strArray1 = { "1.2.3.4", "1.2.3.5", "1.2.3.7"}; strArray2 = { "SELECT * FROM RegistryKeyChangeEvent", "SELECT * FROM RegistryValueChangeEvent", "SELECT * FROM RegistryTreeChangeEvent" }; dwArray = { 1,2,3,5,6 }; objArray = { instance of EmbedClass{PropOfClass=3;}, instance of EmbedClass{PropOfClass=4;} }; };