/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 兼容。