我怎样才能防止这个警告?
[DCC 警告] uFvSystem.pas(293): W1024 组合有符号和无符号类型 - 扩大了两个操作数
function LinkerTimestamp: TDateTime; overload;
begin
Result := PImageNtHeaders(HInstance + PImageDosHeader(HInstance)^._lfanew)
^.FileHeader.TimeDateStamp / SecsPerDay + UnixDateDelta;
end;
该错误消息表明您正在使用混合有符号和无符号操作数执行整数算术。唯一的整数算术在这里:
HInstance + PImageDosHeader(HInstance)^._lfanew
第一个操作数是无符号的,第二个操作数是有符号的,尽管它必须是正数。
您可以通过强制转换来抑制警告。最好在无符号上下文中执行算术,从而避免范围检查错误。因此,强制转换被放置在第二个操作数周围:
HInstance + NativeUInt(PImageDosHeader(HInstance)^._lfanew)
or
HInstance + Cardinal(PImageDosHeader(HInstance)^._lfanew)
如果您有一台较旧的 Delphi,但没有NativeUInt
.
然而,你实际上是在对指针执行算术,所以我会这样写:
PByte(HInstance) + PImageDosHeader(HInstance)^._lfanew
or
PAnsiChar(HInstance) + PImageDosHeader(HInstance)^._lfanew
在较旧的 Delphi 版本中PByte
不支持算术。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)