Aracılığıyla paylaş


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 IDispatchgeç 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>

Ayrıca bkz.