共用方式為


dirtyCastAndCallOnInterface MDA

在已標記為僅限晚期繫結的類別介面上,嘗試透過 vtable 進行早期繫結呼叫時,dirtyCastAndCallOnInterface Managed 偵錯助理 (MDA) 就會啟動。

症狀

在經由 COM 將早期繫結呼叫置入 CLR 時,應用程式會擲回存取違規,或是發生未預期的行為。

原因

程式碼嘗試經由僅限晚期繫結的類別介面,透過 vtable 進行早期繫結呼叫。 請注意,根據預設類別介面都會被識別為僅限晚期繫結。 運用具有 AutoDispatch 值 ([ClassInterface(ClassInterfaceType.AutoDispatch)]) 的 ClassInterfaceAttribute 屬性 (Attribute),也能將這些識別為晚期繫結。

解決方式

建議的解決方式為,定義由 COM 使用的明確介面,並讓 COM 用戶端透過此介面,而非透過自動產生的類別介面來呼叫。 或者,來自 COM 的呼叫也可以由 IDispatch 轉換成晚期繫結呼叫。

最後,有也可能會將類別識別為 AutoDual ([ClassInterface(ClassInterfaceType.AutoDual)]),以允許從 COM 發出早期繫結呼叫。然而,由於 ClassInterfaceAttribute 中所描述的版本控制限制,請盡可能不要使用 AutoDual

對執行階段的影響

這個 MDA 對 CLR 無效。 此 MDA 只會報告關於晚期繫結介面上之早期繫結呼叫的資料。

Output

以早期繫結存取之方法或欄位的名稱。

組態

<mdaConfig>
  <assistants>
    <dirtyCastAndCallOnInterface />
  </assistants>
</mdaConfig>

請參閱

參考

ClassInterfaceAttribute

概念

診斷 Managed 偵錯助理的錯誤

其他資源

互通性