Bagikan melalui


dirtyCastAndCallOnInterface MDA

Catatan

Artikel ini khusus untuk .NET Framework. Ini tidak berlaku untuk implementasi .NET yang lebih baru, termasuk .NET 6 dan versi yang lebih baru.

dirtyCastAndCallOnInterface asisten penelusuran kesalahan terkelola (MDA) diaktifkan saat panggilan terikat awal melalui vtable dicoba pada antarmuka kelas yang telah ditandai sebagai hanya terikat akhir.

Gejala

Aplikasi melakukan pelanggaran akses atau memiliki perilaku tak terduga saat melakukan panggilan awal melalui COM ke CLR.

Penyebab

Kode mencoba panggilan terikat awal melalui vtable melalui antarmuka kelas yang hanya terikat akhir. Perhatikan bahwa secara default antarmuka kelas diidentifikasi sebagai batas akhir saja. Kelas tersebut juga dapat diidentifikasi sebagai terikat akhir dengan atribut ClassInterfaceAttribute dengan nilai AutoDispatch ([ClassInterface(ClassInterfaceType.AutoDispatch)]).

Resolusi

Resolusi yang disarankan adalah untuk mendefinisikan antarmuka eksplisit untuk digunakan oleh COM dan meminta klien COM menelepon melalui antarmuka ini alih-alih melalui antarmuka kelas yang dibuat secara otomatis. Alternatifnya, panggilan dari COM dapat diubah menjadi panggilan akhir melalui IDispatch.

Terakhir, dimungkinkan untuk mengidentifikasi kelas sebagai AutoDual ([ClassInterface(ClassInterfaceType.AutoDual)]) untuk memungkinkan panggilan terikat awal dilakukan dari COM; namun, menggunakan AutoDual sangat tidak disarankan karena batasan versi yang dijelaskan di ClassInterfaceAttribute.

Efek pada Runtime

MDA ini tidak berpengaruh pada runtime bahasa umum. MDA ini hanya melaporkan data tentang panggilan terikat awal pada antarmuka terikat akhir.

Output

Nama metode atau nama bidang yang diakses awal terikat.

Konfigurasi

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

Lihat juga