/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