Пример COM-класса (Руководство по программированию на C#)
Обновлен: Ноябрь 2007
Далее приведен пример класса, который можно предоставить в качестве COM-объекта. После помещения этого кода в CS-файл и добавления в проект свойству Регистрация для COM-взаимодействия необходимо присвоить значение Истина. Дополнительные сведения см. в разделе Практическое руководство. Регистрация компонента для COM-взаимодействия.
Предоставление объектов Visual C# для COM требует объявления интерфейса класса, интерфейса событий (если необходимо) и самого класса. Члены класса должны соответствовать следующим правилам, чтобы стать видимыми COM.
Класс должен быть открытым.
Свойства, методы и события должны быть открытыми.
Свойства и методы должны быть объявлены в интерфейсе классов.
События должны быть объявлены в интерфейсе событий.
Другие открытые члены в классе, которые не объявлены в этих интерфейсах, не будут видимыми для COM, но будут доступным другим объектам .NET Framework.
Чтобы предоставить свойства и методы COM, их необходимо объявить в интерфейсе классов, пометить атрибутов DispId и реализовать в классе. Порядок объявления членов в интерфейсе это порядок, используемый для виртуальных методов COM.
Чтобы предоставить события из класса, их необходимо объявить в интерфейсе событий и пометить атрибутом DispId. Класс не должен реализовывать этот интерфейс.
Класс реализует интерфейс классов; он может реализовывать несколько интерфейсов, но первой реализацией будет интерфейс классов по умолчанию. Реализуйте методы и свойства, доступные модели COM здесь. Они должны быть помечены как открытые и должны соответствовать объявлениям в интерфейсе классов. Также, объявите здесь события, инициируемые классом. Они должны быть помечены как открытые и должны соответствовать объявлениям в интерфейсе событий.
Дополнительные сведения см. в разделах Пример COM-взаимодействия, часть 1, Пример COM-взаимодействия, часть 2 и Примеры COM-взаимодействия.
Пример
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
{
}
}
См. также
Основные понятия
Руководство по программированию в C#