COM-Beispielklassen (C#-Programmierhandbuch)
Aktualisiert: November 2007
Folgendes ist ein Beispiel einer Klasse, die Sie als COM-Objekt verfügbar machen würden. Nachdem dieser Code in eine CS-Datei eingefügt und dem Projekt hinzugefügt wurde, setzen Sie die Eigenschaft Für COM-Interop registrieren auf True. Weitere Informationen finden Sie unter Gewusst wie: Registrieren einer Komponente für COM-Interop.
Das Verfügbarmachen von Visual C#-Objekten für COM erfordert die Deklaration einer Klassenschnittstelle, einer Ereignisschnittstelle (falls erforderlich) und der Klasse selbst. Folgende Regeln gelten für die Klassenmember, damit sie für COM sichtbar sind:
Es muss sich um eine öffentliche Klasse handeln.
Eigenschaften, Methoden und Ereignisse müssen öffentlich sein.
Eigenschaften und Methoden müssen auf der Klassenschnittstelle deklariert werden.
Ereignisse müssen auf der Ereignisschnittstelle deklariert werden.
Andere öffentliche Klassenmember, die nicht auf diesen Schnittstellen deklariert werden, sind für COM nicht sichtbar. Für andere .NET Framework-Objekte sind sie jedoch sichtbar.
Um Eigenschaften und Methoden für COM verfügbar zu machen, müssen Sie diese auf der Klassenschnittstelle deklarieren und mit einem DispId-Attribut markieren. Anschließend müssen Sie sie in der Klasse implementieren. Die Reihenfolge, in der die Member auf der Schnittstelle deklariert werden, entspricht der für die COM-vtable verwendeten Reihenfolge.
Um Ereignisse aus Ihrer Klasse verfügbar zu machen, müssen Sie diese auf der Ereignisschnittstelle deklarieren und mit einem DispId-Attribut markieren. Die Klasse sollte diese Schnittstelle nicht implementieren.
Die Klasse implementiert die Klassenschnittstelle; sie kann mehr als eine Schnittstelle implementieren, zuerst wird jedoch die standardmäßige Klassenschnittstelle implementiert. Implementieren Sie hier die für COM verfügbar gemachten Methoden und Eigenschaften. Sie müssen als öffentlich markiert sein und den Deklarationen in der Klassenschnittstelle entsprechen. Deklarieren Sie hier darüber hinaus die durch die Klasse ausgelösten Ereignisse. Sie müssen als öffentlich markiert sein und den Deklarationen in der Ereignisschnittstelle entsprechen.
Weitere Informationen finden Sie unter Beispiel für COM-Interop Teil 1, Beispiel für COM-Interop Teil 2 und Beispiele für COM-Interoperabilität.
Beispiel
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
{
}
}