Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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>