我有一个名为Simple Tunnel的项目delphi 7 其中一项功能是计算网络互联网的总下载量或总上传量
像这样的图片: Simple Tunnel - Rev8.3 我使用的功能:function BytesToFriendlyString(Value : DWord) : string;
const
OneKB = 1024;
OneMB = OneKB * 1024;
OneGB = OneMB * 1024;
begin
if Value < OneKB then
Result := FormatFloat('#,##0.00 B',Value)
else
if Value < OneMB then
Result := FormatFloat('#,##0.00 KB', Value / OneKB)
else
if Value < OneGB then
Result := FormatFloat('#,##0.00 MB', Value / OneMB)
else
if Value > OneGB then
Result := FormatFloat('#,##0.00 GB', Value / OneGB)
end; (*BytesToFriendlyString*)
adn on timer我放置此功能
..........................
if (MagRasCon.ConnectState = RASCS_Connected) then
begin
MagRasPer.GetPerfStats ;
edtTotalUP.Text := BytesToFriendlyString (MagRasPer.PerfXmitCur [0]);
edtTotalDL.Text := BytesToFriendlyString (MagRasPer.PerfRecvCur [0]);
它可以计算此网络互联网上的总下载量或总上传量,但始终会停止计算总数为4GB 即使在Proxifier上它的数量为4.74GB。
如何使它可以超过4GB .. ??
答案 0 :(得分:1)
DWORD
是无符号的32位整数。最大值为2 ^ 32或4GB。那就是问题所在。您需要一个可以容纳更大值的变量类型。使用Int64
带符号的64位类型。现代Delphi有UInt64
,无符号64位,但不是Delphi 7.仍然有一个签名的Int64
将满足您的需求。
答案 1 :(得分:-1)
您的函数接受DWORD参数,该参数是在Windows.pas中定义的类型
type
DWORD = Cardinal;
Cardinal
类型是无符号的32位整数,其范围为0到4294967295.由于该高值为4GB,因此无法使其计数高于4GB。
如果Delphi 7支持Int64,并且MagRasPer支持INt64,则可以使用它来获得4GB以上。如果他们中的任何一个(或两个)没有,你就不能。