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.