CA1412: ComSource-Schnittstellen als IDispatch markieren

TypeName

MarkComSourceInterfacesAsIDispatch

CheckId

CA1412

Kategorie (Category)

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

Weitere Ressourcen

Interoperation mit nicht verwaltetem Code