我发现了ComClass,现在我该如何引用它?

时间:2013-02-19 07:13:52

标签: delphi com delphi-2010 com-server comclass

我在Delphi 2010中编写了一个小型COM服务器,它充当零售应用程序的插件。零售应用程序查找“发现”接口,该接口注册为每个接口调用TAutoObjectFactory.Create的任意数量的附加接口。这工作正常 - 所有插件接口都按设计运行。

但是现在我想从另一个接口调用一个接口的公共方法,所以我不必重复代码。看起来很简单,只需调用ComClassManager.ForEachFactory来查找我需要使用的接口的ClassID。也有这个工作!

但是现在我找到了这个类,我被一个看似微不足道的最后一步所困扰:如何使用或强制转换类(或类引用?)我找到它实际调用它的一个方法。

在我发送给ForEachFactory的“FactoryProc”中,我假设TComObjectFactory的ComClass属性是我所追求的,但它是TClass类型,是对实际类的类引用它所指向的对象(至少我希望我能正确理解这一点)。我对类引用有点模糊,我尝试强制转换或以其他方式取消引用此属性导致访问冲突或编译错误。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

您的评论正确,ComClassManager处理的是课程,而不是实例。您需要的是(您的应用程序本地实现)running object table(或类似的东西),因此插件实例可以相互交互。

如何实际实施取决于您真正需要的是什么,例如在所有正在运行的实例上调用方法,或仅在特定类的实例上调用方法。