Condividi tramite


Contrassegnare le interfacce ComSource come IDispatch

Aggiornamento: novembre 2007

TypeName

MarkComSourceInterfacesAsIDispatch

CheckId

CA1412

Categoria

Microsoft.Interoperability

Breaking Change

Breaking

Causa

Un tipo è contrassegnato con l'attributo System.Runtime.InteropServices.ComSourceInterfacesAttribute e almeno una delle interfacce specificate non è contrassegnata con l'attributo System.Runtime.InteropServices.InterfaceTypeAttribute impostato su ComInterfaceType.InterfaceIsIDispatch.

Descrizione della regola

L'oggetto ComSourceInterfacesAttribute consente di identificare le interfacce di eventi che una classe espone ai client COM. Tali interfacce devono essere esposte come InterfaceIsIDispatch per consentire ai client COM di Visual Basic 6 di ricevere notifiche di eventi. Per impostazione predefinita, se un'interfaccia non viene contrassegnata dall'attributo InterfaceTypeAttribute, essa viene esposta come interfaccia duale.

Correzione di violazioni

Per correggere una violazione di questa regola, aggiungere o modificare l'attributo InterfaceTypeAttribute in modo che il relativo valore sia impostato su InterfaceIsIDispatch per tutte le interfacce specificate con l'attributo ComSourceInterfacesAttribute.

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

Nell'esempio illustrato di seguito viene visualizzata una classe in cui una delle interfacce viola la regola.

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

Regole correlate

Non utilizzare AutoDual ClassInterfaceType

Vedere anche

Attività

Procedura: generare eventi gestiti da un sink COM

Altre risorse

Interoperabilità con codice non gestito