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>