2012-05-03 3 views
0

次のコードでは、EIntOverflowの例外が発生します。 これはデバッグできません。なぜなら、それは私のPCではなく、ユーザーPC上で起こるからです。EIntOverflow on Delphi

var 

    dwread, iBytesPerMFTRecord : cardinal; 

    pc : PChar; 

begin 

//// 
// some code here 
//// 

Readfile(hDevice, PChar(pc)^, 100, dwread, nil); 


for n:=0 to dwread div iBytesPerMFTRecord -1 do // `EIntOverflow` exception 

ReadFile関数は、行を次のように EIntOverflow例外をトリガdwreadための奇妙な何かを返しているようです。

1°)dwreadがこの例外をトリガするために返されることはありますか?

2°)それを制御する方法は? Delphiのヘルプから

+0

あなたはこの質問を見てきました - http://stackoverflow.com/questions/2417919/delphi-how-to-avoid-eintoverflow-underflow-when-subtracting? – RBA

+0

'ReadFile'関数が失敗した可能性があります。 'GetLastError()'または 'Win32Check()' –

+0

を見て、これを確認できます。 – RBA

答えて

3

ゼロは私が推測する:

{$Q+} 
procedure TForm1.Button2Click(Sender: TObject); 
var 
    dw: Cardinal; 
    I: Integer; 

begin 
    dw:= 0; 
    I:= dw - 1; // raised exception class EIntOverflow with message 'Integer overflow'. 
    ShowMessage(IntToStr(I)); 
end; 
+0

ありがとうございます。それは今はっきりしている – user382591

1

からhttp://docwiki.embarcadero.com/Libraries/en/System.SysUtils.EIntOverflow

EIntOverflow is the exception class for integer calculations whose 
results are too large to fit in the allocated register. 

EIntOverflow occurs when data is lost because an integer result 
is too large to retain. 

は、あなたが大きな値を受け入れるためにループで使用されるあなたの変数のデータ型を変更する必要があります。