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