Следующий код должен компилироваться и компилироваться со многими другими типами.
Однако компилятор сообщает, что "Постоянный объект не может быть передан как параметр var parameter", несмотря на то, что переменная, очевидно, является переменной.
program CurrencyConstant;
{$APPTYPE CONSOLE}
var
GVar: Currency;
begin
FillChar(GVar, SizeOf(GVar), 0);
end.
Аналогично, та же проблема возникает с локальной переменной в процедуре.
procedure TestCurrency;
var
LVar: Currency;
begin
FillChar(LVar, SizeOf(LVar), 0);
end;
Я подозреваю, что это связано с тем, что FillChar
является магической процедурой компилятора и что Dest
является нетипизированным параметром var. FillChar
- единственная подпрограмма, которую я нашел с этой проблемой.
- Что вызывает эту проблему?
- Возникают ли какие-либо другие типы?
В ответ на неизбежное "Зачем вам делать эти комментарии": у нас есть генератор кода, который использует FillChar для генерации первичных структур записей и примитивных типов. Он работает со всем остальным, но неожиданно провалился с валютой. У нас есть обходные пути, но было бы неплохо понять первопричину и узнать, может ли что-то другое вызвать у нас проблемы.
Изменить
Из Jeroen answer разумно сделать вывод, что проблема существует во всех версиях Delphi. Кроме того, массив валют, по-видимому, имеет сходную проблему.
Ответ Дэвида дает некоторые полезные обходные пути.
Последнее решение, которое необходимо рассмотреть, - это изменение генератора для работы с валютой в качестве специального случая и просто установите Value := 0
.