Необязательные параметры в библиотеках Active X - PullRequest
4 голосов
/ 22 сентября 2009

Я создаю библиотеку ActiveX в Delphi, в которой конкретный объект имеет свойство с именем DevelopmentCount с одним параметром типа date. Внутренне свойство getter вызывает функцию с аналогичным именем для обычного объекта Delphi, где единственный параметр является необязательным (этот последний фактор может быть неактуальным).

Когда мы компилируем эту библиотеку в Delphi 2006 для конечного пользователя (используя Excel VBA), оказывается, что один параметр свойства DevelopmentCount является необязательным.

Мы перешли на Delphi 2009 (используем его 6 месяцев и более). Когда та же библиотека скомпилирована с Delphi 2009 для конечного пользователя, один параметр свойства DevelopmentCount больше не является обязательным.

Мой вопрос: как я могу сделать этот параметр необязательным в Delphi 2009.

1 Ответ

4 голосов
/ 25 сентября 2009

Чтобы добавить параметр по умолчанию (называемый необязательным параметром в VBA) в библиотеке COM, необходимо установить флаг параметра в редакторе библиотеки типов. Нажмите на столбец модификатора, затем на кнопку соответствующего параметра. Установите флажок имеет значение по умолчанию и поместите значение по умолчанию в прилагаемое поле редактирования.

Теперь о проблеме. В Delphi 2009 есть ошибка в редакторе библиотеки типов, которая пытается записать дату в файл ridl в виде строки. Редактор должен фактически преобразовать это в целое число. Это не скомпилируется. К счастью, файл REDL является строковым файлом и может быть отредактирован. Так что это то, что вы увидите в файле REDL

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

изменить эту дату на целое число (примечание 30/12/1899 равно 0)

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

Теперь библиотека будет скомпилирована, и будет применено значение по умолчанию.

Обратите внимание, что если вы откроете библиотеку типов в Delphi, она заменит целое число строкой даты, и вы снова не сможете скомпилировать, поэтому вам придется продолжать изменять ее обратно. Я не знаю, было ли это исправлено в Delphi 2010.

...