COM 类示例

下面的代码是将公开为 COM 对象的类的示例。 在将此代码放置在 .cs 文件中并添加到项目后,将“注册 COM 互操作”属性设置为“True”。 有关详细信息,请参阅如何:注册 COM 互操作组件

对 COM 公开 C# 对象需要声明类接口、“事件接口”(如有必要)和类本身。 类成员必须遵循这些规则才能显示在 COM 中:

  • 类必须是公开的。
  • 属性、方法和事件必须是公开的。
  • 必须在类接口上声明属性和方法。
  • 必须在事件接口中声明事件。

该类中未在这些接口中声明的其他公共成员对 COM 不可见,但它们对其他 .NET 对象可见。 若要对 COM 公开属性和方法,则必须在类接口上声明这些属性和方法,将它们标记为 DispId 属性,并在类中实现它们。 你在接口中声明的成员的顺序是用于 COM vtable 的顺序。 若要从类中公开事件,则必须在事件接口上声明这些事件并将其标记为 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
    {
    }
}

另请参阅