allocate 屬性

[allocate] ACF 屬性可讓您自訂 IDL 檔案中所定義類型的記憶體配置和解除配置。

typedef [allocate (allocate-option-list) [, type-attribute-list] ] type-name;

參數

allocate-option-list

指定一或多個記憶體配置選項。 選取其中一個 single_nodeall_nodes,或其中一個 免費dont_free,或每個配對的其中一個。 當您指定多個選項時,請使用逗號分隔選項。

type-attribute-list

指定其他選擇性的 ACF 類型屬性。 當您指定多個類型屬性時,請使用逗號分隔選項。

type-name

指定 IDL 檔案中定義的類型。

備註

[allocate]屬性具有下列有效選項。

選項 Description
all_nodes 呼叫以配置和釋放所有節點的記憶體。
single_node 進行許多個別呼叫,以配置並釋放每個記憶體節點。
free 從伺服器存根傳回時釋放記憶體。
dont_free 不會在從伺服器存根傳回時釋放記憶體。

 

根據預設,存根可以針對唯一或完整指標所參考的資料配置儲存體,方法是針對每個指標個別呼叫 midl_user_allocatemidl_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;

另請參閱

應用程式組態檔 (ACF)

in

midl_user_allocate

midl_user_free

out

typedef