Freigeben über


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

Weitere Ressourcen

Interaktion mit nicht verwaltetem Code