數據表示法
運算環境可能會有很大的差異,網路架構也一樣。 為了因應這些差異,MIDL 可讓您修改代表數據的方式。 有時候,您可以將資料轉換成應用程式更容易處理的格式來簡化開發。 您可以改變應用程式的數據格式,使其可以更有效率地透過網路傳輸。
[transmit_as] 和 [represent_as] 屬性會指示編譯程式將存根在用戶端和伺服器之間傳遞的可轉譯類型與用戶端和伺服器應用程式所使用的使用者類型產生關聯。 您必須提供執行使用者類型與可轉譯類型之間轉換的例程,以及用來釋放用來保存已轉換數據的記憶體的例程。 使用 [transmit_as] IDL 屬性或 [represent_as] ACF 屬性會指示存根在傳輸前後呼叫這些轉換例程。 [transmit_as] 屬性可讓您將一個數據類型轉換成另一個數據類型,以便透過網路傳輸。 [represent_as] 屬性可讓您控制從網路向應用程式呈現數據的方式。
[wire_marshal] 和 [user_marshal] 屬性是Microsoft OSF-DCE IDL 的延伸模組。 其語法與功能類似 DCE 指定的 [transmit_as] 和 [represent_as] 屬性。 差別在於,您不需要將數據從某個類型轉換成另一種類型,而是直接封送處理數據。 若要這樣做,您必須提供外部例程,以調整用戶端和伺服器端的數據緩衝區大小、封送處理和取消分割客戶端端上的數據,以及釋放伺服器端的數據。 MIDL 編譯程式會產生格式代碼,以指示 NDR 引擎在需要時呼叫這些外部例程。
[wire_marshal] 和 [user_marshal] 屬性可讓您封送處理無法跨進程界限傳輸的數據類型。 此外,因為與類型轉換相關聯的額外負荷較少,[wire_marshal] 和 [user_marshal] 在運行時間提供改善的效能,相較於 [transmit_as],[represent_as]。 [wire_marshal] 和 [user_marshal] 屬性彼此互斥,以及指定類型的 [transmit_as] 和 [represent_as] 属性。
請務必注意,實作 [wire_marshal] 和 [user_marshal] 屬性必須遵循 OSF-DCE 規格規定的封送處理規則。 基於這個理由,如果您不熟悉有線通訊協定,不建議使用這些屬性。 如需有關 NDR 語法傳輸的詳細資訊,請參閱 www.opengroup.org。
本節提供下列主題中 MIDL 屬性的簡短概觀: