ComSource-Schnittstellen als IDispatch markieren
Aktualisiert: November 2007
TypeName |
MarkComSourceInterfacesAsIDispatch |
CheckId |
CA1412 |
Kategorie |
Microsoft.Interoperability |
Unterbrechende Änderung |
Breaking |
Ursache
Ein Typ ist mit dem System.Runtime.InteropServices.ComSourceInterfacesAttribute-Attribut markiert, und mindestens eine der angegebenen Schnittstellen ist nicht mit dem System.Runtime.InteropServices.InterfaceTypeAttribute-Attribut markiert, das auf ComInterfaceType.InterfaceIsIDispatch festgelegt ist.
Regelbeschreibung
Mithilfe von ComSourceInterfacesAttribute werden die Ereignisschnittstellen identifiziert, die eine Klasse für COM-Clients 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.
Behandlung 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
AutoDual ClassInterfaceType nicht verwenden
Siehe auch
Aufgaben
Gewusst wie: Auslösen von Ereignissen, die von einem COM-Empfänger behandelt werden