We recommend using Visual Studio 2017
This documentation is archived and is not being maintained.

Mark ComSource interfaces as IDispatch







Breaking Change


A type is marked with the System.Runtime.InteropServices.ComSourceInterfacesAttribute attribute and at least one the specified interfaces is not marked with the System.Runtime.InteropServices.InterfaceTypeAttribute attribute set to ComInterfaceType.InterfaceIsIDispatch.

ComSourceInterfacesAttribute is used to identify the event interfaces that a class exposes to COM clients. These interfaces must be exposed as InterfaceIsIDispatch to allow Visual Basic 6 COM clients to receive event notifications. By default, if an interface is not marked with the InterfaceTypeAttribute attribute, it is exposed as a dual interface.

To fix a violation of this rule add or modify the InterfaceTypeAttribute attribute so that its value is set to InterfaceIsIDispatch for all the interfaces specified with the ComSourceInterfacesAttribute attribute.

Do not suppress a warning from this rule.

The following example shows a class where one of the interfaces violates the rule.

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