dirtyCastAndCallOnInterface MDA
Not
Bu makale .NET Framework'e özgüdür. .NET 6 ve sonraki sürümleri de dahil olmak üzere daha yeni .NET uygulamaları için geçerli değildir.
Yönetilen dirtyCastAndCallOnInterface
hata ayıklama yardımcısı (MDA), yalnızca geç bağlanmış olarak işaretlenmiş bir sınıf arabiriminde vtable üzerinden erken bağlanan bir çağrı denendiğinde etkinleştirilir.
Belirtiler
Uygulama, CLR'ye COM aracılığıyla erken bağlanan bir çağrı yerleştirirken erişim ihlali oluşturur veya beklenmeyen davranışlar gösterir.
Neden
Kod, yalnızca geç bağlanan bir sınıf arabirimi aracılığıyla bir vtable aracılığıyla erken bağlanan bir çağrıyı deniyor. Varsayılan olarak sınıf arabirimlerinin yalnızca geç bağlı olarak tanımlandığını unutmayın. Bunlar, özniteliğine ClassInterfaceAttribute bir AutoDispatch değerle ([ClassInterface(ClassInterfaceType.AutoDispatch)]
) geç bağlı olarak da tanımlanabilir.
Çözüm
Önerilen çözüm, COM tarafından kullanılmak üzere açık bir arabirim tanımlamak ve COM istemcilerinin otomatik olarak oluşturulan sınıf arabirimi yerine bu arabirim üzerinden çağırmasını sağlamaktır. Alternatif olarak, COM'dan gelen çağrı aracılığıyla IDispatch
geç bağlanan bir aramaya dönüştürülebilir.
Son olarak, erken bağlanan çağrıların COM'dan yerleştirilmesine izin vermek için sınıfını () olarak AutoDual tanımlamak mümkündür; ancak sürümünde açıklanan ClassInterfaceAttributesürüm oluşturma sınırlamaları nedeniyle kullanımı AutoDual kesinlikle[ClassInterface(ClassInterfaceType.AutoDual)]
önerilmez.
Çalışma Zamanı üzerindeki etkisi
Bu MDA'nın CLR üzerinde hiçbir etkisi yoktur. Yalnızca geç bağlanan arabirimlerde erken bağlanan çağrılarla ilgili verileri raporlar.
Çıktı
Yöntemin adı veya erken bağlanan erişilen alanın adı.
Yapılandırma
<mdaConfig>
<assistants>
<dirtyCastAndCallOnInterface />
</assistants>
</mdaConfig>