Microsoft RPC Binding-Handle扩展
IDL 语言的 Microsoft 扩展支持多个句柄参数,这些参数显示在第一个最左侧参数以外的位置。 以下步骤描述了 MIDL 编译器在 DCE 兼容模式 (/osf) 以及默认 (Microsoft 扩展) 模式下解析绑定句柄参数的顺序。
DCE 兼容性模式
- 显示在第一个位置的绑定句柄。
- 最左侧的 [in, context_handle] 参数。
- 由 [implicit_handle] 或 [auto_handle] 指定的隐式绑定句柄。
- 如果没有 ACF,则默认使用 [auto_handle]。
默认模式
- 最左侧的显式绑定句柄。
- 由 [implicit_handle] 或 [auto_handle] 指定的隐式绑定句柄。
- 如果没有 ACF,则默认使用 [auto_handle]。
DCE IDL 编译器查找显式绑定句柄作为第一个参数。 如果第一个参数不是绑定句柄,并且指定了一个或多个上下文句柄,则最左侧的上下文句柄用作绑定句柄。 当第一个参数不是句柄且没有上下文句柄时,该过程使用使用 ACF 属性 [implicit_handle] 或 [auto_handle] 的隐式绑定。
IDL 的 Microsoft 扩展允许绑定句柄位于第一个参数以外的位置。 最左边的 [in] 显式句柄参数(无论是基元、程序员定义的还是上下文句柄)是绑定句柄。 如果没有句柄参数,则过程使用使用 ACF 属性 [implicit_handle] 或 [auto_handle] 的隐式绑定。
以下规则适用于 DCE 兼容性 (/osf) 模式和默认模式:
- 当不存在 ACF 时,使用自动句柄绑定。
- 单个函数的显式 [in] 或 [in, out] 句柄会抢占为接口指定的任何隐式绑定。
- 不支持多个 [in] 或 [in, out] 基元句柄。
- 允许多个 [in] 或 [in, out] 显式上下文句柄。
- 程序员定义的所有句柄参数(绑定句柄参数除外)都被视为可传递的数据。
下表包含示例,并介绍了如何在每个编译器模式下分配绑定句柄。
示例 | 说明 |
---|---|
|
未指定显式句柄。 使用由 [ implicit_handle] 或 [ auto_handle] 指定的隐式绑定句柄。 如果没有 ACF,则使用自动句柄。 |
|
指定了 handle_t 类型的显式句柄。 参数 H 是过程的绑定句柄。 |
|
第一个参数不是句柄。 在默认模式下,最左侧的句柄参数 H 是绑定句柄。 在 /osf 模式下,使用隐式绑定。 报告错误是因为第二个参数应可传输,并且无法传输handle_t。 |
|
第一个参数不是句柄。 在默认模式下,最左侧的句柄参数 H 是绑定句柄。 存根调用用户提供的例程MY_HDL_bind和MY_HDL_unbind。 在/osf 模式下,使用隐式绑定。 程序员定义的句柄参数 H 被视为可传递的数据。 |
|
第一个参数是绑定句柄。 参数 H 是绑定句柄参数。 程序员定义的第二个句柄参数被视为可传递的数据。 |
|
绑定句柄是上下文句柄。 参数 H 是绑定句柄。 |