CA1412: Označte rozhraní ComSource jako IDispatch
TypeName |
MarkComSourceInterfacesAsIDispatch |
CheckId |
CA1412 |
Kategorie |
Microsoft.interoperability |
Narušující změna |
Narušující |
Příčina
Typ je označen atributem ComSourceInterfacesAttribute a alespoň jedno zadané rozhraní není označeno atributem InterfaceTypeAttribute nastaveným na hodnotu InterfaceIsDispatch.
Popis pravidla
ComSourceInterfacesAttribute slouží k identifikaci událostí rozhraní, které třída zpřístupňuje klientům modelu COM (Component Object Model).Tato rozhraní musí být zpřístupněna jako InterfaceIsIDispatch pro to, aby klienti modelu COM jazyka Visual Basic 6 mohli přijímat oznámení událostí.Ve výchozím nastavení, pokud rozhraní není označeno atributem InterfaceTypeAttribute, je zpřístupněno jako duální rozhraní.
Jak vyřešit porušení
Pro napravení porušení tohoto pravidla je zapotřebí přidat nebo upravit atribut InterfaceTypeAttribute tak, aby jeho hodnota byla nastavena na InterfaceIsIDispatch pro všechna rozhraní, která jsou určena atributem ComSourceInterfacesAttribute.
Kdy potlačit upozornění
Nepotlačujte upozornění na toto pravidlo.
Příklad
Následující příklad ukazuje třídu, kde jedno z rozhraní porušuje pravidlo.
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.
}
}
Související pravidla
CA1408: Nepoužívejte AutoDual ClassInterfaceType
Viz také
Úkoly
Postupy: Generování událostí zpracovávaných jímkou COM