dirtyCastAndCallOnInterface – pomocník spravovaného ladění (MDA)
Poznámka:
Tento článek je specifický pro rozhraní .NET Framework. Nevztahuje se na novější implementace .NET, včetně .NET 6 a novějších verzí.
Pomocník dirtyCastAndCallOnInterface
spravovaného ladění (MDA) se aktivuje, když se na rozhraní třídy, které bylo označeno pouze jako opožděné, pokusíte provést volání prostřednictvím tabulky s časnou vazbou.
Příznaky
Aplikace vyvolá narušení přístupu nebo má neočekávané chování při umísťování volání v rané vazbě prostřednictvím modelu COM do CLR.
Příčina
Kód se pokouší volat pomocí tabulky vtable prostřednictvím rozhraní třídy, které je vázáno pouze pozdě. Všimněte si, že ve výchozím nastavení jsou rozhraní tříd identifikována pouze jako opožděná. Dají se také identifikovat jako zpožděné s atributem ClassInterfaceAttribute s AutoDispatch hodnotou ([ClassInterface(ClassInterfaceType.AutoDispatch)]
).
Rozlišení
Doporučeným řešením je definovat explicitní rozhraní pro použití modelu COM a klienti modelu COM volat prostřednictvím tohoto rozhraní místo prostřednictvím automaticky generovaného rozhraní třídy. Alternativně lze volání z modelu COM transformovat na opožděné volání prostřednictvím IDispatch
.
Nakonec je možné identifikovat třídu jako AutoDual ([ClassInterface(ClassInterfaceType.AutoDual)]
), aby bylo možné z modelu COM umístit volání s časnou vazbou. Použití AutoDual se však důrazně nedoporučuje kvůli omezením správy verzí popsaným v ClassInterfaceAttributetématu .
Vliv na modul runtime
Tento mdA nemá žádný vliv na CLR. Hlásí pouze data o voláních s časnou vazbou na rozhraních s pozdní vazbou.
Výstup
Název metody nebo názvu pole, ke které se přistupuje v rané fázi.
Konfigurace
<mdaConfig>
<assistants>
<dirtyCastAndCallOnInterface />
</assistants>
</mdaConfig>