我在Delphi中创建一个ActiveX库,其中一个特定对象具有一个名为DevelopmentCount的属性,其中包含一个date类型的参数。在内部,属性getter在普通Delphi对象上调用类似命名的函数,其中单个参数是可选的(这最后一个因素可能是无关紧要的)。
当我们将Delphi 2006中的这个库编译给最终用户(使用Excel VBA)时,看起来DevelopmentCount属性的单个参数是可选的。
我们已经搬到了Delphi 2009(已经使用了6个月或更长时间)。当使用Delphi 2009编译相同的库时,对于最终用户,DevelopmentCount属性的单个参数不再是可选的。
我的问题是,如何使用Delphi 2009使这个参数成为可选参数。
答案 0 :(得分: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中修复。