格式字符串

格式字符串是 NDR 引擎理解的解释标记。 格式字符串通常称为 MOP;本文档始终使用术语格式字符串。

更确切地说,格式字符是单个 (原子) 可解释标记。 每个格式字符的大小为一个字节。 格式字符串是格式字符或格式字符和数字数据的序列。 术语描述符还用于命名常见序列;例如,参数格式字符串或参数描述符是用于描述例程参数的格式字符串。

格式字符具有建议性的符号名称,如 FC_LONG 或 FC_STRUCT。 MIDL 和 NDR 引擎使用的所有格式字符串字符都在 Ndrtypes.h 文件中定义。

设置字符串表格式

引擎使用两个主要格式字符串表:保留过程描述符的过程格式字符串表 __MIDL_ProcFormatString;和保留数据类型描述符的类型格式字符串表 __MIDL_TypeFormatString。 编译器 (*_c.c、*_s.c、*_p.c) 生成main存根文件中。 过程格式字符串表主要由各种解释器使用,但它也用于缓冲区转换,而不考虑编译器模式。 调用核心 NDR 引擎以指示要处理的特定数据类型时,将使用类型格式字符串表。

格式字符串表示法

本文档中使用的表示法遵循常见的编程说明准则,带有条形 ( |) 用于表示可选元素的替代构造和方括号 ( [ ] ) 。 为了便于阅读 (责任) ,格式字符串经常堆积起来。 在本文档中,FC 表示单个格式字符。 格式字符在所有 CAPS 中显示,使用其实际符号名称。 其他任意字段由名称和大小表示。

尖括号 ( <> ) 用于表示描述符的大小。 采用下表中显示的约定。

表示法 含义
< n> 描述符的大小为 n 个字节。
<> 描述符的大小各不相同。
{<>}* 描述符重复任意次数 (0,1,2 ...) 。

 

以下格式字符具有特殊含义。

字符 含义
FC_END 指示某些格式字符串的结尾。
FC_PAD 未解释的填充字符。