transmit_as 屬性
[transmit_as]屬性會指示編譯器關聯type-id*,這是用戶端和伺服器應用程式所操作的呈現類型xmit-type。
typedef [transmit_as(xmit-type) [[ , type-attribute-list ]] ] type-specifier declarator-list;
void __RPC_USER type-id_to_xmit (
type-id __RPC_FAR *,
xmit-type __RPC_FAR * __RPC_FAR *);
void __RPC_USER type-id_from_xmit (
xmit-type __RPC_FAR *,
type-id __RPC_FAR *);
void __RPC_USER type-id_free_inst (
type-id __RPC_FAR *);
void __RPC_USER type-id_free_xmit (
xmit-type__RPC_FAR *);
參數
-
xmit-type
-
指定在用戶端與伺服器之間傳輸的資料類型。
-
type-attribute-list
-
指定套用至類型的一或多個屬性。 有效的類型屬性包括 [handle]、 [switch_type];指標屬性 [ref]、 [unique]或 [ptr];和使用屬性 [string] 和 [ignore]。 以逗號分隔多個屬性。
-
type-specifier
-
指定 基底類型、 結構、 等位、 列舉 類型或類型識別碼。 選擇性的儲存體規格可以在 type-specifier之前。
-
declarator-list
-
指定標準 C 宣告子,例如識別碼、指標宣告子和陣列宣告子。 如需詳細資訊,請參閱 陣列和Sized-Pointer屬性、 陣列和 陣列和指標。 declarator-list是由一或多個宣告子所組成,並以逗號分隔。 函式宣告子中的參數宣告子,例如參數名稱,是選擇性的。
-
type-id
-
指定提供給用戶端和伺服器應用程式的資料類型名稱。
備註
若要使用 [transmit_as] 屬性,使用者必須提供常式,以在呈現與傳輸的類型之間轉換資料;這些常式也必須釋放用來保存已轉換資料的記憶體。 [transmit_as]屬性會指示存根呼叫使用者提供的轉換常式。
傳輸的類型 xmit-type 必須解析為 MIDL 基底類型、預先定義類型或類型識別碼。 如需詳細資訊,請參閱 MIDL 基底類型。
使用者必須提供下列常式。
常式名稱 | Description |
---|---|
type-id**_to_xmit** | 將資料從呈現的類型轉換為傳輸的類型。 這個常式會配置傳輸型別的記憶體,以及傳輸類型中指標所參考的任何資料。 |
type-id**_from_xmit** | 將資料從傳輸的類型轉換為呈現的類型。 此常式負責為所呈現類型中的指標所參考的資料配置記憶體。 RPC 會配置類型本身的記憶體。 |
type-id**_free_inst** | 釋放配置給所呈現類型中指標所參考資料的記憶體。 RPC 會釋放類型本身的記憶體。 |
type-id**_free_xmit** | 釋放呼叫端用於傳輸型別的儲存體,以及傳輸類型中指標所參考的資料。 |
用戶端存根會呼叫 type-id**_to_xmit** 來配置傳輸類型的空間,並將資料轉譯為 xmit-type 類型的物件。伺服器存根會配置原始資料類型的空間,並呼叫 type-id**_from_xmit** 將資料從傳輸的類型轉譯成呈現的類型。
從應用程式程式碼傳回時,伺服器存根會呼叫 type-id**_free_inst** 來解除配置伺服器端 類型識別碼 的儲存體。 用戶端存根會呼叫 type-id**_free_xmit** 來解除配置用戶端上的 xmit 類型 儲存體。
下列類型不能有 [transmit_as] 屬性:
- 具有 [coNtext_handle] 型別屬性和類型做為參數與 [coNtext_handle] 屬性) 的內容控制碼 (類型
- 管線或衍生自管道的類型
- 做為管道定義基底類型的資料類型
- 為指標或解析為指標的參數
- 符合規範、不同或開啟陣列的參數
- 包含一致性陣列的結構
- 預先定義的類型 handle_tvoid
傳輸的類型必須符合下列限制:
- 它們不得為指標或包含指標。
- 它們不得為管道或包含管道。
範例
typedef struct _TREE_NODE_TYPE
{
unsigned short data;
struct _TREE_NODE_TYPE * left;
struct _TREE_NODE_TYPE * right;
} TREE_NODE_TYPE;
typedef [transmit_as(TREE_XMIT_TYPE)] TREE_NODE_TYPE * TREE_TYPE;
void __RPC_USER TREE_TYPE_to_xmit(
TREE_TYPE __RPC_FAR * ,
TREE_XMIT_TYPE __RPC_FAR * __RPC_FAR *);
void __RPC_USER TREE_TYPE_from_xmit (
TREE_XMIT_TYPE __RPC_FAR *,
TREE_TYPE __RPC_FAR *);
void __RPC_USER TREE_TYPE_free_inst(
TREE_TYPE __RPC_FAR *);
void __RPC_USER TREE_TYPE_free_xmit(
TREE_XMIT_TYPE __RPC_FAR *);
另請參閱