nonComVisibleBaseClass MDA
Yönetilen nonComVisibleBaseClass
hata ayıklama yardımcısı (MDA), COM görünür olmayan bir QueryInterface
temel sınıftan türetilen COM görünür bir yönetilen sınıfın COM çağrılabilen sarmalayıcıda (CCW) yerel veya yönetilmeyen kod tarafından bir çağrı yapıldığında etkinleştirilir. Çağrısı, QueryInterface
MDA'nın yalnızca çağrının sınıf arabirimini veya COM görünür yönetilen sınıfının varsayılanını IDispatch
istediği durumlarda etkinleştirilmesine neden olur. özniteliğinin uygulandığı ve COM-visible sınıfı tarafından açıkça uygulanan açık bir arabirim ClassInterfaceAttribute için olduğunda QueryInterface
MDA etkinleştirilmez.
Belirtiler
COR_E_INVALIDOPERATION QueryInterface
HRESULT ile başarısız olan yerel koddan yapılan çağrı. HRESULT, bu MDA'nın etkinleştirilmesine neden olacak çalışma zamanı izin QueryInterface
verme çağrılarından kaynaklanıyor olabilir.
Nedeni
Çalışma zamanı, olası sürüm oluşturma sorunları nedeniyle COM görünür olmayan bir sınıftan türetilen COM görünür sınıfının sınıf arabirimi veya varsayılan IDispatch
arabirimi için çağrılara izin QueryInterface
veremez. Örneğin, com-görünür olmayan temel sınıfa herhangi bir genel üye eklendiyse, türetilmiş sınıfı kullanan mevcut COM istemcileri, temel sınıf üyelerini içeren türetilmiş sınıfın vtable'ı böyle bir değişiklikle değiştirileceğinden, potansiyel olarak bozulabilir. COM'a sunulan açık arabirimler, vtable'da arabirimlerin temel üyelerini içermediğinden bu soruna sahip değildir.
Çözüm
Sınıf arabirimini kullanıma sunma. Açık bir arabirim tanımlayın ve özniteliğini bu arabirime uygulayın ClassInterfaceAttribute .
Çalışma Zamanı Üzerindeki Etkisi
Bu MDA'nın CLR üzerinde hiçbir etkisi yoktur.
Çıktı
Aşağıda, COM görünür olmayan bir QueryInterface
sınıftan türetilen COM görünür sınıfındaki Derived
bir çağrı için örnek bir ileti verilmiştir Base
.
A QueryInterface call was made requesting the class interface of COM
visible managed class 'Derived'. However since this class derives from
non COM visible class 'Base', the QueryInterface call will fail. This
is done to prevent the non COM visible base class from being
constrained by the COM versioning rules.
Yapılandırma
<mdaConfig>
<assistants>
<nonComVisibleBaseClass />
</assistants>
</mdaConfig>
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin