COM-Beispielklasse
Der folgende Code ist ein Beispiel für eine Klasse, die Sie als COM-Objekt offenlegen würden. Nachdem Sie diesen Code in einer CS-Datei platziert haben, die Ihrem Projekt hinzugefügt wurde, legen Sie die Eigenschaft Für COM-Interop registrieren auf TRUE fest. Weitere Informationen finden Sie unter Vorgehensweise: Registrieren einer Komponente für COM-Interop.
Das Verfügbarmachen von C#-Objekten für COM erfordert die Deklaration einer Klassenschnittstelle, ggf. einer „Ereignisschnittstelle“ und der Klasse selbst. Klassenmember müssen diesen Regeln folgen, um für COM sichtbar zu sein:
- Die Klasse muss öffentlich sein.
- Eigenschaften, Methoden und Ereignisse müssen öffentlich sein.
- Eigenschaften und Methoden müssen auf der Klassenschnittstelle deklariert werden.
- Ereignisse müssen in der Ereignisschnittstelle deklariert werden.
Andere öffentliche Member in der Klasse, die nicht in diesen Schnittstellen deklariert sind, sind für COM nicht sichtbar, aber für andere .NET-Objekte sind sie sichtbar. Um Eigenschaften und Methoden für COM verfügbar zu machen, müssen Sie diese auf der Klassenschnittstelle deklarieren, sie mit einem DispId
-Attribut markieren und sie in der Klasse implementieren. Die Reihenfolge, in der die Member in der Schnittstelle deklariert werden, ist die für die COM-Vtable verwendete Reihenfolge. Um Ereignisse aus Ihrer Klasse verfügbar zu machen, müssen Sie diese auf der Ereignisschnittstelle deklarieren und sie mit einem DispId
-Attribut markieren. Die Klasse sollte diese Schnittstelle nicht implementieren.
Die Klasse implementiert die Klassenschnittstelle. Sie kann mehr als eine Schnittstelle implementieren, aber die erste Implementierung ist die Standard-Klassenschnittstelle. Implementieren Sie die Methoden und Eigenschaften hier, die Sie für COM verfügbar gemacht haben. Sie müssen öffentlich sein und den Deklarationen in der Klassenschnittstelle entsprechen. Deklarieren Sie außerdem die von der Klasse hier ausgelösten Ereignisse. Sie müssen öffentlich sein und den Deklarationen in der Ereignisschnittstelle entsprechen.
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
{
}
}