Скрипт отчета

отредактировано 06:47 Раздел: FastReport 3.0
есть объект, потомок IDispatch. У этого объекта есть свойство Value с dispid 0.
есть функция, возвращающая объект.

В скрипте
var
  V1,
  V2: Integer;

begin
  V1 := GetMyObject( 1 ); // функция вернула объект с Value = 1
  ShowMessage( IntToStr( V1 ) ); // '1'
  V2 := GetMyObject( 2 ); // функция вернула тот же объект с Value = 2
  ShowMessage( IntToStr( V2 ) ); // '2'
  ShowMessage( IntToStr( V1 ) ); // '2' ????????????????
end.

Похоже, что в переменные V1 и V2 попало не значение свойства Value, а сам объект. Т.е. при присвоении неучитывался тип самих переменных. Плохо знаю Delphi, но на WIN API, для корректного присвоения, я бы вызвал VariantChangeType, с типом результата (в даном случае VT_I4). Ничем иным я не могу объяснить совпадение значений переменных.

если модифицировать пример:
var
  V1,
  V2: Integer;

begin
  V1 := GetMyObject( 1 ).Value; // функция вернула объект с Value = 1
  ShowMessage( IntToStr( V1 ) ); // '1'
  V2 := GetMyObject( 2 ).Value; // функция вернула тот же объект с Value = 2
  ShowMessage( IntToStr( V2 ) ); // '2'
  ShowMessage( IntToStr( V1 ) ); // '1'
end.
то код начинает себя вести, как и ожидалось.

Похоже имеет место быть ошибка.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.