Compartir a través de


CA1412: Marcar las interfaces ComSource como IDispatch

Nombre de tipo

MarkComSourceInterfacesAsIDispatch

Identificador de comprobación

CA1412

Categoría

Microsoft.Interoperability

Cambio problemático

Motivo

Un tipo está marcado con el atributo ComSourceInterfacesAttribute y al menos una de la interfaz especificada no está marcada con el atributo InterfaceTypeAttribute establecido en el valor InterfaceIsDispatch.

Descripción de la regla

ComSourceInterfacesAttribute se utiliza para identificar las interfaces de eventos que una clase expone a los clientes del Modelo de objetos componentes (COM).Estas interfaces se deben exponer como InterfaceIsIDispatch para permitir que los clientes COM de Visual Basic 6 reciban las notificaciones de eventos.De forma predeterminada, si una interfaz no está marcada con el atributo InterfaceTypeAttribute, se expone como una interfaz dual.

Cómo corregir infracciones

Para corregir una infracción de esta regla, agregue o modifique el atributo InterfaceTypeAttribute de modo que su valor se establezca en InterfaceIsIDispatch para todas las interfaces especificadas con el atributo ComSourceInterfacesAttribute.

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.

Ejemplo

En el ejemplo siguiente se muestra una clase donde una de las interfaces infringe la regla.

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

Reglas relacionadas

CA1408: No utilizar AutoDual ClassInterfaceType

Vea también

Tareas

Cómo: Generar eventos controlados por un receptor COM

Otros recursos

Interoperar con código no administrado