CA1412: Marcar las interfaces ComSource como IDispatch
TypeName |
MarkComSourceInterfacesAsIDispatch |
Identificador de comprobación |
CA1412 |
Categoría |
Microsoft.Interoperability |
Cambio problemático |
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