通过Delphi中的Automation实现对象模型:最简单的方法是什么?

时间:2010-06-22 13:39:25

标签: delphi com automation activex object-model

我们在Delphi中从头开始重写计算核心,我们正在寻找让其他人编写代码的方法。

自动化似乎是一种相当安全的方法。我们正在考虑的一个用途是将其提供给VBA / Office,并生成.NET程序集(基于Automation对象,这很容易)。

但代码应该仍然易于使用Delphi,因为我们将使用它编写我们的(桌面)UI。

现在我一直在研究在Delphi中创建自动化服务器,在类型库向导中设计组件然后生成基本代码看起来很麻烦。

我们必须实施的计算在尚未批准的官方规则和法规中有所描述,因此在我们完成之前仍然可以改变 - 它们很可能会,或许相当广泛。等待最终版本不是一种选择。

另一种方法可能是首先完成整个对象模型,然后编写一个单独的自动化服务器,它只描述顶级对象,切换$METHODINFO ON,并使用TObjectDispatch返回所有从属对象。 正如我所看到的,这需要编写包装来通过IDispatch接口返回对象。由于那里有超过100个不同的类,这看起来不是一个有吸引力的选择。 编辑: TObjectDispatch非常智能,可以包装属性和方法返回的任何对象;所以只需要包裹顶部对象。缺乏完整的类型库确实意味着只能进行后期绑定。

在Delphi中编写COM可访问对象模型是否有其他更容易(阅读:无忧)的方式?

2 个答案:

答案 0 :(得分:2)

您不必使用类型库设计器。您可以编写或生成(例如,从Delphi类的RTTI)一个.ridl文件,并将其添加到您的自动化库项目中。

答案 1 :(得分:0)

从RTTI生成界面描述是个好主意!生成接口后,可以从它们生成delphi单元并在类中实现。当然,大部分都已实现,因为您毕竟已经从这些类生成了接口。之后的绑定解析可以在此之后使用RTTI手动完成,并在可编写脚本的类的公共基类中实现IDispatch和IDispatchEx。