Share via


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
    {
    }
}

Zie ook