/backward_compat Switch

The /backward_compat switch directs the MIDL compiler to turn off some advanced features when generating RPC/COM stubs.

midl /backward_compat { maybenull_sizeis | zeroout_alignmentgap | 
     BSTR_byvalue_escaping | string_defaultvalue | signed_wchar_t }

Switch Options

maybenull_sizeis

Applies the [disable_consistency_check] attribute to an entire MIDL compilation.

zeroout_alignmentgap

Turns off zeroing out gaps in the marshaled buffer.

BSTR_byvalue_escaping

Directs the MIDL compiler to honor escape sequences such as ‘\n’ or ‘\t’ in BSTRs.

string_defaultvalue

Forces the MIDL compiler to coerce strings in [defaultvalue] attributes into VARIANT.VT_I4 type before coercing the value into the correct type.

signed_wchar_t

Directs MIDL to treat the wchar_t type as signed for compatibility with Visual Basic.

Remarks

  • maybenull_sizeis: See [disable_consistency_check].

  • zeroout_alignmentgap: When IDLs are compiled with –target NT60 or higher, MIDL will create stubs that zero out any alignment gaps between members or a structure in the wire buffer. The command line switch /backward_compat zeroout_alignmentgap directs MIDL to disable this feature.

    In the following example structure, the wire buffer contains a 7 byte alignment gap to align the hyper member to 8 after the char member. With –target NT60 or higher, MIDL will zero out that gap unless the switch is used.

    IDL file:

    typedef struct _structwithgaps{
        char c;
        // 7 byte gap to align the following hyper to 8 
        hyper h;
    } structwithgap;
    

    This switch can provide a slight performance improvement with potentially significant increases in disclosure risk.

  • BSTR_byvalue_escaping: By default, the MIDL compiler does not process escape sequences such as ‘\n’ or ‘\t’ in string constants for OLE Automation when converting a string constant to types VT_LPSTR or VT_LPWSTR. With this backward compatibility switch option, the escape sequences are evaluated.

  • string_defaultvalue: Forces the MIDL compiler to coerce numeric strings in [defaultvalue] attributes into VARIANT.VT_I4 type before coercing the value into the correct type. This can lead to loss of precision in some cases, so this switch option is not recommended.

  • signed_wchar_t: Directs MIDL to treat the wchar_t type as signed for compatibility with Visual Basic.