共用方式為


多維度陣列

數位屬性也可以與多維度數位搭配使用。 不過,請小心確保陣列的每個維度都有對應的屬性。 例如:

/* IDL file */
[ 
  uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45),
  version(2.0)
]
interface multiarray
{
  void arr2d( [in] short        d1size,
              [in] short        d2len,
              [in, size_is( d1size, ), length_is ( , d2len) ] long array2d[*][30] ) ;
}

上述陣列是30個元素陣列的一致陣列(大小為 d1size),每個陣列都有 d2len 元素。 [size_is] 屬性括弧中的逗號指定 d1size 中的值會套用至陣列的第一個維度。 同樣地,[length_is] 屬性括弧中的命令表示 d2len 中的值會套用至陣列的第二個維度。

MIDL 2.0 編譯程式提供兩種方法來封送處理參數:混合模式(/Os)和完全解譯的 (/Oif 或/Oicf)。 根據預設,MIDL 編譯程式會以混合模式編譯介面。 您不需要明確指定 /Os參數來取得混合模式封送處理

完全解譯的方法會完全脫機封送處理數據。 這可大幅減少存根程序代碼的大小,但也會導致效能降低。 在混合模式封送處理中,存根會在在線封送處理某些參數。 雖然這會產生較大的存根大小,但它也會提供更高的效能。

謹慎

在此模式中編譯 IDL 檔案時,請小心。 在混合模式中使用多維度陣列,可能會導致未正確封送處理的參數。 當您的介面定義多維度陣列的參數時,建議使用 /Oicf 命令行參數。

 

[字串] 屬性也可以與多維度陣列搭配使用。 屬性會套用至最不重要的維度,例如一致性字串數位。 您也可以使用多維度指標屬性。 例如:

/* IDL file */
[ 
  uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45),
  version(2.0)
]
interface multiarray
{
  void arr2d([in] short  d1len,
             [in] short  d2len,
             [in] size_is(d1len, d2len) ] long  ** ptr2d) ;
}

在上述範例中,變數 ptr2d 是指針 d1len 大小的區塊指標,每個指標都指向 d2len 指標,

多維度陣列不等於指標陣列。 多維度陣列是記憶體中的單一大型數據區塊。 指標陣列只包含陣列中的指標區塊。 指標指向的數據可以是記憶體中的任何位置。 此外,ANSI C 語法只允許在多維度陣列中未指定最重要的 (最左邊) 陣列維度。 因此,以下是有效的 語句:

long a1[] [20]

將此與下列無效的 語句進行比較:

long a1[20] []