2

我创建了一个公开事件的 .Net 程序集。我可以毫无问题地使用来自 VB6 的事件。现在我已将程序集部署给 PowerBuilder 开发人员,他说如果 COM 对象不是 ActiveX,他无法处理来自 COM 对象的事件。

ActiveX 事件与普通 COM 事件有什么不同?我是否应该实现一些额外的接口,以便 PowerBuilder 可以“看到”事件?

提前致谢。

4

1 回答 1

1

这两个事件都是通过连接点IConnectionPoint和朋友)实现的。ActiveX 控件通常使用某些附加约束来实现连接点:

  • 控件本身属于“Apartment”线程模型,并且事件将从创建控件的 STA 线程触发
  • 传出事件接口是一个分派接口,但它可能在其声明中具有方法和属性,控件将调用IDispatch::Invoke以传递实际事件。
  • 传出接口声明在类型库中可用,这就是 ActiveX 控件使用者发现现有事件的方式
  • 该控件列出了类型库上一个 coclass 的主接口和事件接口,并且还有一个实现IProvideClassInfo2来提供此信息。

PowerBuilder 或其他 COM 事件使用者可能会依赖上述一个或多个项目,因此它只能与某些事件源一起使用,而拒绝与其他事件源一起使用。

于 2012-08-29T09:10:31.263 回答