Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi:将常量添加到TFileTime_Delphi_Casting_Unsigned_Int64 - Fatal编程技术网

Delphi:将常量添加到TFileTime

Delphi:将常量添加到TFileTime,delphi,casting,unsigned,int64,Delphi,Casting,Unsigned,Int64,我是Delphi新手,我需要在我的项目中为TFileTime添加一些常量,这是64位值的上下部分的记录。如何在Delphi中实现这一点?我在C++中只找到代码,但我不知道如何在Delphi中用无符号的In64 ul隆隆来做,也不知道如何把这个转换成LordWord DWOR:< /P> ULONGLONG qwResult; // Copy the time into a quadword. qwResult = (((ULONGLONG) ft.dwHighDateTime) <<

我是Delphi新手,我需要在我的项目中为TFileTime添加一些常量,这是64位值的上下部分的记录。如何在Delphi中实现这一点?我在C++中只找到代码,但我不知道如何在Delphi中用无符号的In64 ul隆隆来做,也不知道如何把这个转换成LordWord DWOR:< /P>
ULONGLONG qwResult;

// Copy the time into a quadword.
qwResult = (((ULONGLONG) ft.dwHighDateTime) << 32) + ft.dwLowDateTime;

// Add constant
qwResult += constant;

// Copy the result back into the FILETIME structure.
ft.dwLowDateTime  = (DWORD) (qwResult & 0xFFFFFFFF );
ft.dwHighDateTime = (DWORD) (qwResult >> 32 );
谢谢

文件时间结构定义为:

typedef结构\u文件时间{ DWORD dwLowDateTime; DWORD-dwHighDateTime; }FILETIME,*PFILETIME; 因此,由于Windows在little Endian上运行,因此此结构的布局与64位整数值兼容

因此,您可以将TFileTime强制转换为UInt64,执行算术运算,然后进行反向转换。像这样:

函数递增的FileTimeConst值:TFileTime;const Incr:UInt64:t文件时间; 开始 结果:=TFileTimeUINT64值+增量; 终止 现在,FILETIME记录的文档显示:

不建议您从中添加和减去值 FILETIME结构以获取相对时间。相反,你应该复制 将文件时间的低阶和高阶部分转换为ULARGE_整数 结构,在四部分成员上执行64位算术,然后复制 将LowPart和HighPart成员添加到FILETIME结构中

不要将指向FILETIME结构的指针强制转换为 ULARGE_INTEGER*或_int64*值,因为它可能导致对齐 64位窗口上的错误


在对准错误导致硬故障的目标上,这是一个问题。比如安腾。但是,在x86和x64上,我的答案中的代码很好,因为这些体系结构不会因对齐错误而出现硬故障。这也是因为Delphi编译器不太擅长对齐

const MyFileTime:TFileTime=dwLowDateTime:123;dwHighDateTime:456;我得到了已有的ft值,我只需要给它添加一些常量。你使用的是哪个版本的Delphi?特别是,您的Delphi版本是否具有Int64和/或UInt64类型?确定UInt64解决了一半的问题…:@在hvd中,UInt64的存在实际上并不重要,因为FILETIME的有效范围是0..HighInt64。