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
{
}
}