nonComVisibleBaseClass 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.

nonComVisibleBaseClass Yönetilen 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 yönetilen sınıfının COM çağrılabilen sarmalayıcı (CCW) üzerindeki yerel veya yönetilmeyen kod tarafından çağrı yapıldığında etkinleştirilir. Çağrı, 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. MDA, özniteliği uygulanmış olan ve COM-visible sınıfı tarafından açıkça uygulanan açık bir arabirim ClassInterfaceAttribute için olduğunda QueryInterface etkinleştirilmez.

Belirtiler

QueryInterface COR_E_INVALIDOPERATION HRESULT ile başarısız olan yerel koddan yapılan çağrı. HRESULT, çalışma zamanının bu MDA'nın etkinleştirilmesine neden olacak çağrılara izin QueryInterface vermemesinden kaynaklanıyor olabilir.

Neden

Ç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-visible 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 ClassInterfaceAttribute uygulayın.

Çalışma Zamanı üzerindeki etkisi

Bu MDA'nın CLR üzerinde hiçbir etkisi yoktur.

Çıktı

Aşağıda, COM tarafından 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.