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

指定 基底類型結構等位列舉 類型或類型識別碼。 選擇性儲存體規格可以位於 類型規範之前。

declarator-list

指定標準 C 宣告子,例如識別碼、指標宣告子和陣列宣告子。 如需詳細資訊,請參閱 陣列和Sized-Pointer屬性陣列陣列和指標宣告子清單是由一或多個宣告子所組成,並以逗號分隔。 函式宣告子中的參數宣告子,例如參數名稱是選擇性的。

type-id

指定呈現給用戶端和伺服器應用程式的資料類型名稱。

備註

若要使用 [transmit_as] 屬性,使用者必須提供常式,以在呈現和傳輸的類型之間轉換資料;這些常式也必須釋放用來保存已轉換資料的記憶體。 [transmit_as]屬性會指示存根呼叫使用者提供的轉換常式。

傳輸的類型 xmit-type 必須解析為 MIDL 基底類型、預先定義的類型或類型識別碼。 如需詳細資訊,請參閱 MIDL 基底類型

使用者必須提供下列常式。

常式名稱 描述
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 *);

另請參閱

陣列

MIDL 基底類型

coNtext_handle

枚舉

處理

handle_t

介面定義 (IDL) 檔案

忽略

ptr

ref

字串

結構

switch_type

typedef

union

獨特

void