allocate 屬性
[allocate] ACF 屬性可讓您自訂 IDL 檔案中所定義類型的記憶體配置和解除配置。
typedef [allocate (allocate-option-list) [, type-attribute-list] ] type-name;
-
allocate-option-list
-
指定一或多個記憶體配置選項。 選取其中一個 single_node 或 all_nodes,或其中一個 免費 或 dont_free,或每個配對的其中一個。 當您指定多個選項時,請使用逗號分隔選項。
-
type-attribute-list
-
指定其他選擇性的 ACF 類型屬性。 當您指定多個類型屬性時,請使用逗號分隔選項。
-
type-name
-
指定 IDL 檔案中定義的類型。
[allocate]屬性具有下列有效選項。
選項 | Description |
---|---|
all_nodes | 呼叫以配置和釋放所有節點的記憶體。 |
single_node | 進行許多個別呼叫,以配置並釋放每個記憶體節點。 |
free | 從伺服器存根傳回時釋放記憶體。 |
dont_free | 不會在從伺服器存根傳回時釋放記憶體。 |
根據預設,存根可以針對唯一或完整指標所參考的資料配置儲存體,方法是針對每個指標個別呼叫 midl_user_allocate 和 midl_user_free 。
您可以藉由指定選項 all_nodes來優化應用程式的速度。 此選項會指示存根計算透過指定型別指標參考的所有記憶體大小,以及對 midl_user_allocate進行單一呼叫。 存根會藉由呼叫 midl_user_free來釋放記憶體。
dont_free選項會指示 MIDL 編譯器產生未呼叫指定型別之midl_user_free的伺服器存根。 dont_free選項可讓伺服器應用程式在遠端程序呼叫完成並傳回用戶端之後,讓指標結構保持可存取狀態。
[allocate]屬性會導致任何[in, out]參數,該參數是具有all_nodes選項限定之類型的指標,以在未隔離資料時重新配置記憶體。 應用程式必須負責釋放先前為此參數配置的記憶體。 例如:
typedef struct thistype
{
[string] char * PTHISTYPE;
} * PTHISTYPE
HRESULT proc1 ( [in,out] PTHISTYPE * ppthistype);
資料類型 PTHISTYPE 將會在取消封存之前,依存根重新配置 [out] 方向。 因此,應用程式必須釋放先前配置給此參數資料的記憶體,否則會發生記憶體流失。
/* ACF file */
typedef [allocate(all_nodes, dont_free)] PTYPE1;
typedef [allocate(all_nodes)] PTYPE2;
typedef [allocate(dont_free)] PTYPE3;