使用tlbimp.exe
工具导入基本类型库总是为每个coclass
创建一个接口。例如,这个IDL描述:
interface IFoo : IUnknown
{
HRESULT DoSomething();
}
coclass Bar
{
[default] interface IFoo;
}
结果是:
- 接口
IFoo
表示COM接口, - 类
BarClass
表示COM coclass,和 - 一个用
CoClassAttribute
注释的接口Bar
。
Bar
和IFoo
的GUID相等。在这个主题上,MSDN指出:
此接口具有与coclass的默认接口相同的IID。通过此接口,客户端始终可以注册为事件接收器。
这是我在这个话题上找到的唯一的东西。我知道,由于CoClassAttribute
,我可以使用该接口创建实际类的实例。我也知道,(实际上)我可以简单地使用BarClass
来创建一个新的类实例。我不明白的是,为什么导入过程会生成Bar
接口,即使不定义事件源,因此不能连接事件接收器。
在这个例子中是否可能删除Bar
接口1,或者是否存在我尚未考虑的其他风险?
1 例如通过反汇编互操作程序集。