Udostępnij za pośrednictwem


dirtyCastAndCallOnInterface MDA

Uwaga

Ten artykuł jest specyficzny dla programu .NET Framework. Nie ma zastosowania do nowszych implementacji platformy .NET, w tym .NET 6 i nowszych wersji.

dirtyCastAndCallOnInterface Asystent zarządzanego debugowania (MDA) jest aktywowany, gdy próbujesz nawiązać wczesne wywołanie za pośrednictwem tabeli wirtualnej w interfejsie klasy, który został oznaczony tylko pod koniec ograniczenia.

Objawy

Aplikacja zgłasza naruszenie dostępu lub nieoczekiwane zachowanie podczas umieszczania wczesnego wywołania powiązanego za pośrednictwem modelu COM do środowiska CLR.

Przyczyna

Kod próbuje podjąć wczesne wywołanie za pośrednictwem tabeli wirtualnej za pośrednictwem interfejsu klasy, który jest ograniczony tylko do końca. Należy pamiętać, że domyślnie interfejsy klas są identyfikowane jako tylko ograniczone z opóźnieniem. Można je również zidentyfikować jako późno powiązane z ClassInterfaceAttribute atrybutem z wartością AutoDispatch ([ClassInterface(ClassInterfaceType.AutoDispatch)]).

Rozwiązanie

Zalecaną rozwiązaniem jest zdefiniowanie jawnego interfejsu do użycia przez model COM i wywoływanie klientów COM za pośrednictwem tego interfejsu zamiast za pośrednictwem interfejsu klasy wygenerowanej automatycznie. Alternatywnie wywołanie z modelu COM można przekształcić w połączenie z późnym połączeniem za pośrednictwem metody IDispatch.

Na koniec można zidentyfikować klasę jako AutoDual ([ClassInterface(ClassInterfaceType.AutoDual)]), aby umożliwić umieszczanie wczesnych wywołań powiązanych z modelu COM. Jednak użycie AutoDual jest zdecydowanie odradzane z powodu ograniczeń przechowywania wersji opisanych w temacie ClassInterfaceAttribute.

Wpływ na środowisko uruchomieniowe

Ta usługa MDA nie ma wpływu na CLR. Raportuje tylko dane dotyczące wczesnych wywołań powiązanych z interfejsami z późnym opóźnieniem.

Wyjście

Nazwa metody lub nazwy pola, do których uzyskuje się dostęp wcześniej.

Konfigurowanie

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

Zobacz też