Sdílet prostřednictvím


CA1412: Označte rozhraní ComSource jako IDispatch

TypeName

MarkComSourceInterfacesAsIDispatch

CheckId

CA1412

Kategorie

Microsoft.interoperability

Narušující změna

Narušující

Příčina

Typ je označen atributem ComSourceInterfacesAttribute a alespoň jedno zadané rozhraní není označeno atributem InterfaceTypeAttribute nastaveným na hodnotu InterfaceIsDispatch.

Popis pravidla

ComSourceInterfacesAttribute slouží k identifikaci událostí rozhraní, které třída zpřístupňuje klientům modelu COM (Component Object Model).Tato rozhraní musí být zpřístupněna jako InterfaceIsIDispatch pro to, aby klienti modelu COM jazyka Visual Basic 6 mohli přijímat oznámení událostí.Ve výchozím nastavení, pokud rozhraní není označeno atributem InterfaceTypeAttribute, je zpřístupněno jako duální rozhraní.

Jak vyřešit porušení

Pro napravení porušení tohoto pravidla je zapotřebí přidat nebo upravit atribut InterfaceTypeAttribute tak, aby jeho hodnota byla nastavena na InterfaceIsIDispatch pro všechna rozhraní, která jsou určena atributem ComSourceInterfacesAttribute.

Kdy potlačit upozornění

Nepotlačujte upozornění na toto pravidlo.

Příklad

Následující příklad ukazuje třídu, kde jedno z rozhraní porušuje pravidlo.

Imports Microsoft.VisualBasic
Imports System
Imports System.Runtime.InteropServices

<Assembly: ComVisibleAttribute(True)>
Namespace InteroperabilityLibrary

   ' This violates the rule for type EventSource.
   <InterfaceType(ComInterfaceType.InterfaceIsDual)> _ 
   Public Interface IEventsInterface
      Sub EventOne
      Sub EventTwo
   End Interface 

   ' This satisfies the rule.
   <InterfaceType(ComInterfaceType.InterfaceIsIDispatch)> _ 
   Public Interface IMoreEventsInterface
      Sub EventThree
      Sub EventFour
   End Interface

   <ComSourceInterfaces( _
      "InteroperabilityLibrary.IEventsInterface" & _ 
      ControlChars.NullChar & _ 
      "InteroperabilityLibrary.IMoreEventsInterface")> _
   Public Class EventSource
      ' Event and method declarations. 
   End Class 

End Namespace
using System;
using System.Runtime.InteropServices;

[assembly: ComVisible(true)]
namespace InteroperabilityLibrary
{
   // This violates the rule for type EventSource.
   [InterfaceType(ComInterfaceType.InterfaceIsDual)]
   public interface IEventsInterface
   {
      void EventOne();
      void EventTwo();
   }

   // This satisfies the rule.
   [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
   public interface IMoreEventsInterface
   {
      void EventThree();
      void EventFour();
   }

   [ComSourceInterfaces(
      "InteroperabilityLibrary.IEventsInterface\0" + 
      "InteroperabilityLibrary.IMoreEventsInterface")]
   public class EventSource
   {
      // Event and method declarations.
   }
}

Související pravidla

CA1408: Nepoužívejte AutoDual ClassInterfaceType

Viz také

Úkoly

Postupy: Generování událostí zpracovávaných jímkou COM

Další zdroje

Spolupráce s nespravovaným kódem