Поделиться через


Пример COM-класса (Руководство по программированию на C#)

Далее приведен пример класса, который можно предоставить в качестве COM-объекта. После помещения этого кода в CS-файл и добавления в проект свойству Регистрация для COM-взаимодействия необходимо присвоить значение Истина. Дополнительные сведения см. в разделе Практическое руководство. Регистрация компонента для COM-взаимодействия.

Предоставление объектов Visual C# для COM требует объявления интерфейса класса, интерфейса событий (если необходимо) и самого класса. Члены класса должны соответствовать следующим правилам, чтобы стать видимыми COM.

  • Класс должен быть открытым.

  • Свойства, методы и события должны быть открытыми.

  • Свойства и методы должны быть объявлены в интерфейсе классов.

  • События должны быть объявлены в интерфейсе событий.

Другие открытые члены в классе, которые не объявлены в этих интерфейсах, не будут видимыми для COM, но будут доступным другим объектам .NET Framework.

Чтобы предоставить свойства и методы COM, их необходимо объявить в интерфейсе классов, пометить атрибутов DispId и реализовать в классе. Порядок объявления членов в интерфейсе это порядок, используемый для виртуальных методов COM.

Чтобы предоставить события из класса, их необходимо объявить в интерфейсе событий и пометить атрибутом DispId. Класс не должен реализовывать этот интерфейс.

Класс реализует интерфейс классов; он может реализовывать несколько интерфейсов, но первой реализацией будет интерфейс классов по умолчанию. Реализуйте методы и свойства, доступные модели 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#)

Страница "Построение" в конструкторе проектов (C#)

Основные понятия

Руководство по программированию на C#