/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] 属性。 此属性用作接口属性或操作属性,以选择单个接口或单个操作的封送处理模式。

调用约定

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

示例

midl /Oi filename.idl

midl /Oic filename.idl

midl /Oif filename.idl

另请参阅

/鲁 棒

/no_robust

常规 MIDL 命令行语法

/操作系统

优化

/no_format_opt