我正在 Delphi 中创建一个 ActiveX 库,其中一个特定对象具有一个名为 DevelopmentCount 的属性,带有一个日期类型的参数。在内部,属性 getter 在普通 Delphi 对象上调用一个类似命名的函数,其中单个参数是可选的(最后一个因素可能无关紧要)。
当我们在 Delphi 2006 中将这个库编译给最终用户(使用 Excel VBA)时,DevelopmentCount 属性的单个参数似乎是可选的。
我们已经转移到 Delphi 2009(已经使用了 6 个月或更长时间)。当使用 Delphi 2009 编译相同的库时,对于最终用户而言,DevelopmentCount 属性的单个参数不再是可选的。
我的问题是,我怎样才能让这个参数在 Delphi 2009 中看起来是可选的。
最佳答案
要在 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 中修复。
关于delphi - Active X 库中的可选参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1459560/