共用方式為


dirtyCastAndCallOnInterface MDA

注意

本文專屬於 .NET Framework。 它不適用於較新的 .NET 實作,包括 .NET 6 和更新版本。

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

徵兆

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

原因

程式碼嘗試經由僅限晚期繫結的類別介面,透過 vtable 進行早期繫結呼叫。 請注意,預設會將類別介面識別為僅限晚期繫結。 使用 ClassInterfaceAttribute 屬性搭配 AutoDispatch 值 ([ClassInterface(ClassInterfaceType.AutoDispatch)]),也可能將類別介面識別為晚期繫結。

解決方法

建議的解決方式是定義明確介面以供 COM 使用,並讓 COM 用戶端透過這個介面 (而不是透過自動產生的類別介面) 進行呼叫。 或者,從 COM 的呼叫也可以轉換成經由 IDispatch 的晚期繫結程序呼叫。

最後,您可以將類別識別為 AutoDual ([ClassInterface(ClassInterfaceType.AutoDual)]),以允許從 COM 發出早期繫結呼叫;不過由於 ClassInterfaceAttribute 中所述的版本控制限制,強烈不建議使用 AutoDual

對執行階段的影響

此 MDA 對 CLR 沒有影響。 它只會報告有關晚期繫結介面上之早期繫結呼叫的資料。

輸出

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

組態

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

另請參閱