Exempel på COM-klass
Följande kod är ett exempel på en klass som du skulle exponera som ett COM-objekt. När du har lagt till den här koden i en .cs fil som lagts till i projektet anger du egenskapen Registrera för COM Interop till True. Mer information finns i Så här registrerar du en komponent för COM Interop.
Om C#-objekt ska exponeras för COM måste du deklarera ett klassgränssnitt, ett "händelsegränssnitt" om det behövs och själva klassen. Klassmedlemmar måste följa dessa regler för att vara synliga för COM:
- Klassen måste vara offentlig.
- Egenskaper, metoder och händelser måste vara offentliga.
- Egenskaper och metoder måste deklareras i klassgränssnittet.
- Händelser måste deklareras i händelsegränssnittet.
Andra offentliga medlemmar i klassen som du inte deklarerar i dessa gränssnitt är inte synliga för COM, men de är synliga för andra .NET-objekt. Om du vill exponera egenskaper och metoder för COM måste du deklarera dem i klassgränssnittet och markera dem med ett DispId
attribut och implementera dem i klassen. Den ordning i vilken du deklarerar medlemmarna i gränssnittet är den ordning som används för com-vtablen. Om du vill exponera händelser från klassen måste du deklarera dem i händelsegränssnittet och markera dem med ett DispId
attribut. Klassen ska inte implementera det här gränssnittet.
Klassen implementerar klassgränssnittet. det kan implementera mer än ett gränssnitt, men den första implementeringen är standardklassgränssnittet. Implementera de metoder och egenskaper som exponeras för COM här. De måste vara offentliga och måste matcha deklarationerna i klassgränssnittet. Deklarera även de händelser som genereras av klassen här. De måste vara offentliga och måste matcha deklarationerna i händelsegränssnittet.
Exempel
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
{
}
}