/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:當 IDL 編譯為 --target NT60 或更高版本時,MIDL 會建立存根,將線材緩衝區中成員或結構間的任何對齊間隙歸零。 命令行參數 /backward_compat zeroout_alignmentgap指示 MIDL 停用此功能。

    在下列範例結構中,線緩衝區包含 7 個字節對齊間距,可將超成員對齊字元成員之後的 8。 若目標為 --target 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 型別時,不會處理字串常數中的跳脫序列,例如 '\n」或「\t」。 使用此回溯相容性參數選項時,會評估逸出序列。

  • string_defaultvalue:強制 MIDL 編譯程式將 [defaultvalue] 中的數值字串強制 屬性轉換成 VARIANT。VT_I4類型,再將值強制轉換成正確的類型。 在某些情況下,這可能會導致精確度遺失,因此不建議使用此參數選項。

  • signed_wchar_t:指示 MIDL 將 wchar_t 類型視為簽署,以確保與 Visual Basic 相容。