Как получить общую загрузку и общую загрузку, которая может достигать более 4 ГБ расчетное кодирование Delphi 7

У меня есть проект 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 I поместите эту функцию

..........................
if (MagRasCon.ConnectState = RASCS_Connected) then
    begin
        MagRasPer.GetPerfStats ;

        edtTotalUP.Text := BytesToFriendlyString (MagRasPer.PerfXmitCur [0]);
        edtTotalDL.Text := BytesToFriendlyString (MagRasPer.PerfRecvCur [0]);

он работает, чтобы подсчитать общую загрузку или общую загрузку в этой сети Интернет , но всегда останавливает подсчет в общей сложности 4 ГБ
несмотря на то, что он подсчитывает 4,74 ГБ на Proxifier..

Как сделать его может сосчитать больше чем 4ГБ..??

2 ответа

  1. DWORD 32-разрядное целое число без знака. Максимальное значение 2^32, или 4GB. Вот в чем проблема. Вам нужен тип переменной, который может содержать большие значения. Используйте Int6464-разрядный тип со знаком. Современные Delphi имеютUInt64, без знака 64 бит, но не Delphi 7. Все еще подписанный Int64будет отвечать вашим потребностям.

  2. Функция принимает параметр DWORD, который является типом, определенным в Windows.pas as

    type
      DWORD = Cardinal;
    

    CardinalТип является беззнаковым 32-разрядным целым числом, которое имеет диапазон от 0 до 4294967295. Так как это высокое значение 4GB, нет никакого способа сделать его подсчет выше, чем 4GB.

    Если Delphi 7 поддерживает Int64, и MagRasPer поддерживает INt64, вы можете использовать это, чтобы получить выше 4 ГБ. Если ни один из них (или оба) не делает, вы не можете.