为什么一个Currency变量在Delphi中用FillChar处理为常量?
以下代码应该编译,并且可以使用许多其他类型进行编译.
但是,编译器报告“常量对象不能作为var参数传递”错误 – 尽管变量显然是一个变量. 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是我遇到这个问题的唯一例子. >什么原因导致这个问题?
编辑 从Jeroen’s answer年可以合理地得出结论,这个问题存在于德尔福的所有地方.此外,货币阵列显然也出现了类似的问题. David’s answer提供了一些不错的解决方法. 要考虑的一个最后的解决方法是修改生成器以处理Currency作为一个特殊情况,并简单地设置Value = = 0. 解决方法
正如
requested
Craig Young:
Delphi的编译器错误的解决方法2009年:使用ZeroMemory或FillMemory从Windows单元,工作原理和FillChar. 在Delphi方面,ZeroMemory和FillMemory使用下面的FillChar,其中可能是Delphi 2006的inlined. 可能这个问题只发生在货币,因为这是唯一的数字编译器类型被缩放. 编辑:问题已在XE5 Update 2修复 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |