2016-11-04 1 views
0

У меня есть проект Delphi 7 под названием Simple Tunnel и одна из особенностей заключается в расчете общей загрузки или общую загрузку из сети интернетКак получить Всего загрузок и Total Upload Это может достигать более 4 Гб Расчет Coding Delphi 7

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

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

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

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

Как сделать это может насчитать более 4 Гб .. ??

ответ

1

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

+0

okay thanks ... Я попробую изменить DWORD на Int64 сейчас .. Я надеюсь, что он может считать больше 4gb .. – Zeph

+0

Вам не нужно надеяться. Оно идет до 2^63. –

+0

Должен ли MagRas поддерживать int64 также для этого? – kobik

-1

Ваша функция принимает DWORD, который параметра Я является тип, определенный в качестве Windows.pas

type 
    DWORD = Cardinal; 

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

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

+0

Delphi 7 подписал Int64 –

+0

@DavidHeffernan: Спасибо. Я думал, что я это помню, но не был уверен. У меня нет копии, установленной для проверки. Я не знаю, что такое MagRasPer, поэтому я не знаю, поддерживает ли он Int64. (Я предполагаю, что MagRasPer является частью материала TMagRas Ангуса Джонсона, но не знаю точно). –

Смежные вопросы