不相容變更的範例
處理不相容的變更時,可惜的經驗法則如下:除非非常瞭解,否則任何變更都可以回溯不相容。 此規則需要具備 NDR 規則的知識。 如果您不知道 NDR 是什麼,請勿進行修改。 通常會在應用程式中造成存取違規的變更範例,或封送處理引擎所引發的BAD_STUB_DATA_EXCEPTION,如下所示:
- 在舊方法中間新增方法。
- 從方法新增或移除參數。
- 變更屬性,例如指標屬性:將 [ref] 變更為 [unique] 或 [ptr] ,反之亦然。 每個指標類型都有不同的線表示。
- 變更資料的大小:從短到長、從 char 變更為 wchar_t (unicode) 、將欄位新增至結構、變更固定大小陣列的大小。
- 使用預設子句將等位聯集加入聯集。
用戶端與伺服器之間的某些非預期變更或非預期不符可能會發生如下:
- 修改複合類型的成員,例如結構或陣列。 例如,如果CLIENT_ID從整數變更為 GUID,則具有CLIENT_ID欄位的CLIENT_RECORD結構會變成不相容。 如果串連數層內嵌至實際的遠端參數類型,這可能很難偵測。
- 修改匯入的類型。 此類型可能來自未直接遠端的不同元件,因此變更被視為相容。
- 在 IDL 檔案中使用#ifdef,對 IDL 檔案中的 ifdef 類型定義而言是錯誤的主意,因為災害正在等候發生。 由於建置或其他問題,用戶端會因為建置或其他問題而以與伺服器不同的定義集進行編譯,最後會不相容。