如何获得超过4GB计算编码的总下载和总上传Delphi 7

时间:2016-11-04 12:12:20

标签: delphi delphi-7

我有一个名为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 .. ??

2 个答案:

答案 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以上。如果他们中的任何一个(或两个)没有,你就不能。