/osf switch
/osf 开关强制与 OSF DCE 严格兼容。
midl /osf
此开关没有参数。
如果出于可移植性的原因,应用程序需要与 OSF DCE 严格兼容,请使用此开关。
在 /osf 模式下,当使用完整指针、参数需要内存分配或使用 enable_allocate 属性时,将自动启用 RpcSs 包。 这意味着无需在客户端和服务器应用程序中提供 midl_user_allocate 和 midl_user_free 函数。
使用 /osf 开关编译时,以下 Microsoft 扩展功能不可用:
- 抽象声明符 (IDL 文件中) 未命名参数。
- COM 对象的接口定义。
- 超过 17 个字符的接口名称。
- 仅限 MIDL 的属性,例如 wire_marshal、 user_marshal和 typelib (ODL) 扩展。
- 在 IDL 文件中使用 ACF 关键字 (MIDL /app_config 选项) 。
- 客户端上的静态回调函数。
- 异步属性。
- cpp_quote 和 #pragma midl_echo。
- wchar_t 宽字符类型、常量和字符串。
- 枚举 初始化 (稀疏枚举器) 。
- out-only 大小规范。
- 混合大小指针和大小数组。
- 用于大小和鉴别器说明符的表达式。
- 显式处理参数列表中任意位置的参数。 在 /osf 模式下,MIDL 编译器查找显式绑定句柄作为第一个参数。 如果第一个参数不是绑定句柄,并且指定了一个或多个上下文句柄,则最左侧的上下文句柄用作绑定句柄。 当第一个参数不是句柄且没有上下文句柄时,该过程使用使用 ACF 属性 implicit_handle 或 auto_handle的隐式绑定。
- 指针属性类型继承。 OSF DCE 不允许未归因的指针。 因此,在 /osf 模式下,每个 IDL 文件都必须为其指针定义属性。 如果任何指针没有显式属性,则 IDL 文件必须具有 pointer_default 规范才能设置指针类型。
- IDL 文件中的多个接口。
- 接口块外部的定义。
- 类型限定符,例如 far 和 stdcall。
- 省略方向属性。
使用 /osf 开关编译时,以下 C/C++ 语言扩展不可用:
- 结构和联合中的位字段。
- 用两个斜杠字符分隔的单行注释 (//) 。
- 外部声明。
- 参数列表中带有省略号的过程。
- 键入 int。
- 键入 void * (,但 context_handle属性) 除外。
- 类型限定符(包括带有 ANSI 一致性前缀的表单)包含两个下划线字符: __cdecl、 cdecl、 const、 const、 __export、 export、 __far、 far、 __loadds、 loadds、 __near、 near、 __pascal、 pascal、 __stdcall、 stdcall、 __volatile和 volatile。
- 任何 # 杂注 警告或 #pragma 注释。
- 类型序列化。
- __int3264数据类型。
- /protocol 开关和 ndr64 传输语法。
midl /osf filename.idl
midl /osf /app_config filename.idl