/backward_compat 开关
/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 字节对齐间隙,用于将超成员对齐为字符成员后的 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 编译器在将字符串常量转换为类型VT_LPSTR ™或VT_LPWSTR时,不会处理转义序列,例如\ñ\t€ ™ 。 使用此向后兼容性开关选项,将评估转义序列。
string_defaultvalue:强制 MIDL 编译器将 [defaultvalue] 属性中的数值字符串强制转换为 VARIANT。在将值强制转换为正确的类型之前,VT_I4类型。 在某些情况下,这可能会导致精度损失,因此不建议使用此开关选项。
signed_wchar_t:指示 MIDL 将wchar_t类型视为已签名,以便与 Visual Basic 兼容。