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