資料表示
運算環境可能會明顯不同,因為網路架構也一樣。 為了因應這些差異,MIDL 可讓您修改代表資料的方式。 您有時可以藉由將資料轉換成應用程式更容易處理的格式來簡化開發。 您可以改變應用程式的資料格式,以便透過網路更有效率地傳輸。
[transmit_as]和[represent_as]屬性會指示編譯器將存根在用戶端與伺服器之間傳遞的可轉譯類型與用戶端和伺服器應用程式所使用的使用者類型產生關聯。 您必須提供執行使用者類型與可轉譯類型之間轉換的常式,以及常式,以釋放用來保存已轉換資料的記憶體。 使用 [transmit_as] IDL 屬性或 [represent_as] ACF 屬性會指示存根在傳輸前後呼叫這些轉換常式。 [transmit_as]屬性可讓您將一種資料類型轉換成另一種資料類型,以便透過網路傳輸。 [represent_as]屬性可讓您控制從網路呈現資料給應用程式的方式。
[wire_marshal]和[user_marshal]屬性是 OSF-DCE IDL 的 Microsoft 延伸模組。 其語法與功能類似 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 屬性的簡短概觀: