Exemple de classe COM (Guide de programmation C#)
Mise à jour : novembre 2007
Ci-dessous un exemple d'une classe que vous exposeriez comme un objet COM. Une fois que le code a été placé dans un fichier .cs et ajouté à votre projet, attribuez la valeur True à la propriété Inscrire pour COM Interop. Pour plus d'informations, consultez Comment : inscrire un composant pour COM Interop.
L'exposition d'objets Visual C# à COM requiert la déclaration d'une interface de classe, d'une interface d'événement, si elle est requise, et de la classe elle-même. Les membres de la classe doivent se conformer aux règles suivantes pour être visibles par COM :
La classe doit être publique.
Les propriétés, les méthodes et les événements doivent être publics.
Les propriétés et les méthodes doivent être déclarées sur l'interface de classe.
Les événements doivent être déclarés dans l'interface d'événements.
Les autres membres publics de la classe qui ne sont pas déclarés dans ces interfaces ne seront pas visibles pour COM, mais seront visibles pour d'autres objets .NET Framework.
Pour exposer des propriétés et des méthodes à COM, vous devez les déclarer dans l'interface de classe, les marquer avec l'attribut DispId et les implémenter dans la classe. L'ordre dans lequel les membres sont déclarés dans l'interface est l'ordre utilisé pour la vtable COM.
Pour exposer des événements à partir de votre classe, vous devez les déclarer sur l'interface d'événements et les marquer avec un attribut DispId. La classe ne doit pas implémenter cette interface.
La classe implémente l'interface de classe (elle peut implémenter plus d'une interface, mais la première implémentation sera l'interface de classe par défaut). Implémentez les méthodes et les propriétés exposées à COM à cet emplacement. Ces propriétés et méthodes doivent être marquées comme publiques et doivent correspondre aux déclarations de l'interface de classe. Déclarez également les événements déclenchés par la classe à cet emplacement. Ils doivent être marqués comme publics et doivent correspondre aux déclarations dans l'interface d'événement.
Pour plus d'informations, consultez COM Interop Première partie, exemple, COM Interop Deuxième partie, exemple et Exemples d'interopérabilité COM.
Exemple
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
{
}
}