MOF 配列

配列は、同じデータ型のデータ値のインデックス付きリストで、参照できます。 MOF では、文字列配列と数値配列に加えて、埋め込みオブジェクトと参照の配列がサポートされています。

次の規則では、MOF 配列を定義します。

  • プロパティ識別子の後に使用される角かっこは、クラス定義で配列を指定します。

    Class ArrayDataSample1
    {
        string strArray1[];
    };
    
  • すべての配列は 1 次元である必要があります。

  • 配列は無制限にすることも、明示的なサイズにすることもできます。

    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;}
                   };
    };