CA1412: ComSource-Schnittstellen als IDispatch markieren
TypeName |
MarkComSourceInterfacesAsIDispatch |
CheckId |
CA1412 |
Kategorie |
Microsoft.Interoperability |
Unterbrechende Änderung |
Breaking |
Ursache
Ein Typ ist mit dem ComSourceInterfacesAttribute-Attribut markiert, und mindestens eine der angegebenen Schnittstellen ist nicht mit dem InterfaceTypeAttribute-Attribut markiert, das auf den InterfaceIsDispatch-Wert festgelegt ist.
Regelbeschreibung
ComSourceInterfacesAttribute wird verwendet, um die Ereignisschnittstellen zu identifizieren, die eine Klasse für COM-Clients (Component Object Model ) verfügbar macht. Diese Schnittstellen müssen als InterfaceIsIDispatch verfügbar gemacht werden, damit Visual Basic 6-COM-Clients Ereignisbenachrichtigungen empfangen können. Standardmäßig wird eine Schnittstelle, die nicht mit dem InterfaceTypeAttribute-Attribut markiert ist, als duale Schnittstelle verfügbar gemacht.
Behandeln von Verstößen
Um einen Verstoß gegen diese Regel zu beheben, fügen Sie das InterfaceTypeAttribute-Attribut hinzu bzw. ändern dieses, sodass der zugehörige Wert für alle Schnittstellen, die mit dem ComSourceInterfacesAttribute-Attribut angegeben werden, auf InterfaceIsIDispatch festgelegt wird.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnung dieser Regel.
Beispiel
Im folgenden Beispiel wird eine Klasse dargestellt, in der eine der Schnittstellen gegen die Regel verstößt.
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.
}
}
Verwandte Regeln
CA1408: AutoDual ClassInterfaceType nicht verwenden
Siehe auch
Aufgaben
Gewusst wie: Auslösen von Ereignissen, die von einem COM-Empfänger behandelt werden