/backward_compat Switch
/backward_compat 开关指示 MIDL 编译器在生成 RPC/COM 存根时关闭某些高级功能。
midl /backward_compat { maybenull_sizeis | zeroout_alignmentgap |
BSTR_byvalue_escaping | string_defaultvalue | signed_wchar_t }
切换选项
maybenull_sizeis
- 将 [disable_consistency_check] 属性应用于整个 MIDL 编译。
zeroout_alignmentgap
- 关闭将封送缓冲区中的间隙归零。
BSTR_byvalue_escaping
- 指示 MIDL 编译器遵循转义序列,例如 BSTR 中的\n™ 或 ̃\t̃ ™。
string_defaultvalue
- 强制 MIDL 编译器将 [defaultvalue] 属性中的字符串强制转换为 VARIANT。在将值强制转换为正确的类型之前,VT_I4类型。
signed_wchar_t
- 指示 MIDL 将wchar_t类型视为已签名类型,以便与 Visual Basic 兼容。
备注
maybenull_sizeis:请参阅 [disable_consistency_check]。
zeroout_alignmentgap:使用目标 NT60 或更高版本编译 IDL 时,MIDL 将创建存根,以排除线路缓冲区中成员或结构之间的任何对齐间隙。 命令行开关 /backward_compat zeroout_alignmentgap 指示 MIDL 禁用此功能。
在以下示例结构中,线路缓冲区包含一个 7 字节对齐间距,用于将超成员与 char 成员后的 8 对齐。 对于目标 NT60 或更高版本,除非使用开关,否则 MIDL 将清除该间隔。
IDL 文件:
typedef struct _structwithgaps{ char c; // 7 byte gap to align the following hyper to 8 hyper h; } structwithgap;
此开关可以提供轻微的性能改进,并可能显著增加披露风险。
BSTR_byvalue_escaping:默认情况下,在将字符串常量转换为类型时,MIDL 编译器不会处理 OLE 自动化字符串常量中的\n™ 或 ̃\t\ ™ 等转义序列VT_LPSTR或VT_LPWSTR。 使用此向后兼容性开关选项,将评估转义序列。
string_defaultvalue:强制 MIDL 编译器将 [defaultvalue] 属性中的数值字符串强制转换为 VARIANT。在将值强制转换为正确的类型之前,VT_I4类型。 在某些情况下,这可能会导致精度损失,因此不建议使用此开关选项。
signed_wchar_t:指示 MIDL 将wchar_t类型视为已签名,以便与 Visual Basic 兼容。