4

我在 Delphi 中创建了一个 ActiveX 库,其中一个特定的对象有一个名为 DevelopmentCount 的属性,带有一个日期类型的参数。在内部,属性 getter 调用普通 Delphi 对象上类似命名的函数,其中单个参数是可选的(最后一个因素可能无关紧要)。

当我们在 Delphi 2006 中将这个库编译给最终用户(使用 Excel VBA)时,似乎 DevelopmentCount 属性的单个参数是可选的。

我们已经转移到 Delphi 2009(已经使用了 6 个月或更长时间)。当使用 Delphi 2009 编译同一个库时,对于最终用户而言,DevelopmentCount 属性的单个参数不再是可选的。

我的问题是,如何使这个参数在 Delphi 2009 中看起来是可选的。

4

1 回答 1

4

要在 COM 库中添加默认参数(在 VBA 中称为可选参数),您需要在类型库编辑器中设置参数标志。单击修饰符列,然后单击相关参数的按钮。勾选具有默认值复选框,并在提供的编辑框中输入默认值。

现在解决问题。在 Delphi 2009 中,类型库编辑器中存在一个错误,它试图将日期作为字符串写入 ridl 文件。编辑器实际上应该将其转换为整数。这不会编译。幸运的是,ridl 文件是一个字符串文件,可以编辑。这就是您将在 ridl 文件中看到的内容

HRESULT _stdcall DevelopmentCount([in, defaultvalue(29/12/1899)] DATE);

将该日期更改为整数(注意 30/12/1899 为 0)

HRESULT _stdcall DevelopmentCount([in, defaultvalue(-1)] DATE);

dll 现在将编译,并应用默认值。

请注意,如果您在 Delphi 中打开类型库,它将用日期字符串替换整数,并且您将再次无法编译,因此您必须不断将其更改回来。我不知道这是否已在 Delphi 2010 中修复。

于 2009-09-25T10:42:46.573 回答