数据表示形式

计算环境可能大不相同,网络体系结构也存在差异。 为了适应这些差异,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] 属性可以封送无法跨进程边界传输的数据类型。 此外,由于与类型转换相关的开销较少, 与 [transmit_as][represent_as] 相比,[ wire_marshal][user_marshal] 在运行时提供了更好的性能。 [wire_marshal][user_marshal] 属性彼此之间以及给定类型的 [transmit_as][represent_as] 属性互斥。

请务必注意, [wire_marshal][user_marshal] 属性的实现必须遵循 OSF-DCE 规范规定的封送规则。 因此,如果你不熟悉线路协议,则不建议使用这些属性。 有关 NDR 语法传输的详细信息,请参阅 www.opengroup.org

本部分在以下主题中简要概述了 MIDL 属性的这些属性: