Voorbeeld van COM-klasse
De volgende code is een voorbeeld van een klasse die u als COM-object zou weergeven. Nadat u deze code in een .cs bestand hebt toegevoegd aan uw project, stelt u de eigenschap Register for COM Interop in op True. Zie How to: Register a Component for COM Interop (Een onderdeel registreren voor COM Interop) voor meer informatie.
Als u C#-objecten beschikbaar wilt maken voor COM, moet u indien nodig een klasse-interface, een 'gebeurtenisinterface' en de klasse zelf declareren. Klasseleden moeten de volgende regels volgen om zichtbaar te zijn voor COM:
- De klasse moet openbaar zijn.
- Eigenschappen, methoden en gebeurtenissen moeten openbaar zijn.
- Eigenschappen en methoden moeten worden gedeclareerd in de klasse-interface.
- Gebeurtenissen moeten worden gedeclareerd in de gebeurtenisinterface.
Andere openbare leden in de klasse die u niet declareert in deze interfaces zijn niet zichtbaar voor COM, maar zijn zichtbaar voor andere .NET-objecten. Als u eigenschappen en methoden beschikbaar wilt maken voor COM, moet u ze declareren in de klasse-interface en ze markeren met een DispId
kenmerk en deze in de klasse implementeren. De volgorde waarin u de leden in de interface declareert, is de volgorde die wordt gebruikt voor de COM-vtable. Als u gebeurtenissen uit uw klasse wilt weergeven, moet u ze declareren in de gebeurtenisinterface en deze markeren met een DispId
kenmerk. De klasse mag deze interface niet implementeren.
De klasse implementeert de klasse-interface; het kan meer dan één interface implementeren, maar de eerste implementatie is de standaardklasse-interface. Implementeer hier de methoden en eigenschappen die beschikbaar zijn voor COM. Ze moeten openbaar zijn en moeten overeenkomen met de declaraties in de klasse-interface. Declareer ook de gebeurtenissen die hier door de klasse zijn gegenereerd. Ze moeten openbaar zijn en moeten overeenkomen met de declaraties in de gebeurtenisinterface.
Voorbeeld
using System.Runtime.InteropServices;
namespace project_name
{
[Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F")]
public interface ComClass1Interface
{
}
[Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ComClass1Events
{
}
[Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"),
ClassInterface(ClassInterfaceType.None),
ComSourceInterfaces(typeof(ComClass1Events))]
public class ComClass1 : ComClass1Interface
{
}
}