/Oi 开关

/Oi/Oic 切换指示 MIDL 编译器使用完全解释的封送方法。 /Oicf 开关提供其他性能增强功能。

midl /{Oi | Oic | Oif | Oicf}

切换选项

Oi

指定用于封送客户端和服务器之间传递的存根代码的完全解释方法。

注释

此开关已过时。 建议在其位置使用 /Oicf 开关。

 

Oic

指定提供 /Oi 的所有功能的无代码代理方法,并进一步减小对象接口的客户端存根代码的大小。

注释

此开关已过时。 建议在其位置使用 /Oicf 开关。

 

Oif 或 Oicf

指定无代码代理封送方法,包括 /Oi/Oic 提供的所有功能,但使用新的解释器(快速格式字符串)来提供比 /Oi/Oic 更好的性能。 此开关包括最新的 RPC 增强功能,建议用于新式 RPC 方案。

注解

请注意与支持平台相关的限制。

MIDL 3.0 编译器提供两种方法用于封送代码:完全解释( /Oi/Oic/Oicf)和混合模式( /Os)。 从 MIDL 版本 6.0.359 开始,MIDL 编译器默认生成 /Oicf/robust 存根。 某些模式不支持某些语言功能。 在这种情况下,编译器会自动切换到适当的模式并发出警告。

如果性能是个问题,混合模式 ( /Os) 方法可能是最佳方法。 在此模式下,编译器选择在生成的存根中内联封送某些参数。 虽然这会导致更大的存根大小,但它可提供更高的性能。

完全解释的方法完全脱机封送数据。 这大大减少了存根代码的大小,但会导致性能下降。 此外,对于完全解释的方法,每个过程有 16 个参数的限制。 任何包含超过 16 个参数的过程都将在 /Os 模式下自动处理。 在解释的模式中, /Oicf 提供最佳性能, /Oi 提供最佳的向后兼容性。

如果应用程序使用 MIDL 3.0 中引入的 MIDL 功能,例如 [wire_marshal] 和 [user_marshal] 属性,则可能需要使用 /Oif 选项。 如果应用程序使用 管道 ,则必须使用 /Oif 选项;如果指定另一种模式,MIDL 编译器将切换到 /Oif

若要微调封送存根代码的方式,Microsoft RPC 提供 ACF [optimize] 属性。 此属性用作接口属性或操作属性,用于为单个接口或单个操作选择封送模式。

调用约定

使用 /Oi/Oic/Oif 开关在解释方法中由 MIDL 编译器生成的存根必须在 C 编译过程中编译为 stdcall 或 cdecl 过程。 PASCAL 或 Fastcall 调用约定将不起作用。 此外,服务器存根必须编译为 stdcall。

示例

midl /Oi filename.idl

midl /Oic filename.idl

midl /Oif filename.idl

另见

/鲁 棒

/no_robust

常规 MIDL 命令行语法

/操作系统

优化

/no_format_opt