Application-Allocated緩衝區
ACF 屬性 [byte_count] 會指示存根使用用戶端支援常式未配置或釋放的預先配置緩衝區。 [byte_count] 屬性會套用至指向緩衝區的指標或陣列參數。 它需要參數,以位元組為單位指定緩衝區大小。
用戶端配置的記憶體區域可以包含具有多個指標的複雜資料結構。 由於記憶體區域是連續的,因此應用程式不需要進行數次呼叫,即可個別釋放每個指標和結構。 如同使用 [allocate (all_nodes) ] 屬性時,記憶體區域可以透過對記憶體配置常式或可用常式的一個呼叫來配置或釋放。 不過,不同于使用 [allocate (all_nodes) ] 屬性,緩衝區參數不是由用戶端存根管理,而是由用戶端應用程式管理。
緩衝區必須是 [out]-only 參數,而以位元組為單位的緩衝區長度必須是 [in]-only 參數。 [byte_count] 屬性只能套用至指標類型。 [byte_count] ACF 屬性是 DCE IDL 的 Microsoft 延伸模組,因此,如果您使用 MIDL /osf 參數進行編譯,則無法使用。
在下列範例中, pRoot 參數會使用位元組計數:
/* function prototype in IDL file (fragment) */
void SortNames(
[in] short cNames,
[in, size_is(cNames)] STRINGTYPE pszArray[],
[in] short cBytes,
[out, ref] P_TREE_TYPE pRoot /* tree with sorted data */
);
[byte_count] 屬性會顯示在 ACF 中,如下所示:
/* ACF file (fragment) */
SortNames([byte_count(cBytes)] pRoot);
從這些 IDL 和 ACF 檔案產生的用戶端存根不會配置或釋放此緩衝區的記憶體。 伺服器存根會使用提供的 size 參數,在單一呼叫中配置並釋放緩衝區。 如果資料對指定的緩衝區大小太大,就會引發例外狀況。