2016-11-04 5 views
0

コーディング到達することができますダウンロード数と合計のアップロードを取得するにははどのように4GBの計算よりももっと私はシンプルトンネル と特徴のひとつは、ネットワーク、インターネットからのダウンロード数や総アップロードを計算しているというプロジェクトのデルファイ7を持っているデルファイ7

このピクトのように:私はこの機能に

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

     edtTotalUP.Text := BytesToFriendlyString (MagRasPer.PerfXmitCur [0]); 
     edtTotalDL.Text := BytesToFriendlyString (MagRasPer.PerfRecvCur [0]); 
を置き、タイマーに

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: Simple Tunnel - Rev8.3 私は関数を使用します

それはこのネットワーク、インターネット上でダウンロード数や総アップロードを数える,,が、常にそれがProxifierの4.74ギガバイトを数えていても、合計4ギガバイト でカウントを停止するために働く。..

それは4GB以上を数えることができるようにする方法.. ??

答えて

1

DWORDは、符号なし32ビット整数です。最大値は2^32、つまり4GBです。それが問題です。大きな値を保持できる変数型が必要です。符号付き64ビットタイプInt64を使用してください。現代のデルファイはUInt64、符号なし64ビットですが、Delphi 7はありません。依然として、Int64という符号があなたのニーズを満たします。

+0

大丈夫です...私は今度はInt64にDWORDを変更しようとしています..私はそれが4GB以上をカウントできることを願っています。 – Zeph

+0

あなたは望む必要はありません。 2^63になります。 –

+0

これはMagRasでもint64をサポートしてはいけませんか? – kobik

-1

関数がCardinalタイプそのため4294967295 0の範囲を有する32ビットの符号なし整数である

type 
    DWORD = Cardinal; 

としてWindows.pasにで定義されたタイプのDWORD PARAMTERを受け付け高い値は4GBであり、4GB以上にカウントする方法はありません。

Delphi 7がInt64をサポートし、MagRasPerがINt64をサポートしている場合、これを使用して4GBを超えることができます。どちらか(または両方)がそうでない場合、あなたはできません。

+0

Delphi 7はInt64に署名しました –

+0

@DavidHeffernan:ありがとうございます。私はそれを思い出したと思ったが、確かではなかった。私はチェックするためにどこにでもコピーをインストールしていません。私はMagRasPerが何であるか分からないので、Int64もサポートしているかどうかわかりません。 (私はMagRasPerがAngus JohnsonのTMagRasの一部だと仮定していますが、確かに分かりません)。 –

関連する問題