格式字符串
格式字符串是 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 | 未解释的填充字符。 |