Marque las interfaces de ComSource como IDispatch
Actualización: noviembre 2007
TypeName |
MarkComSourceInterfacesAsIDispatch |
Identificador de comprobación |
CA1412 |
Category |
Microsoft.Interoperability |
Cambio problemático |
Sí |
Motivo
Un tipo está marcado con el atributo System.Runtime.InteropServices.ComSourceInterfacesAttribute y al menos una de las interfaces especificadas no está marcada con el atributo System.Runtime.InteropServices.InterfaceTypeAttribute establecido en ComInterfaceType.InterfaceIsIDispatch.
Descripción de la regla
ComSourceInterfacesAttribute se utiliza para identificar las interfaces de eventos que una clase expone a los clientes 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 esté establecido 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
No utilice AutoDual ClassInterfaceType
Vea también
Tareas
Cómo: Generar eventos controlados por un receptor COM