こんな難しい漢字は手じゃ絶対書けませんね。
で、「お知恵拝借」のスレッドが長くなってしまったので、ここに改めます。
どなたか何か気付いたことがあったら教えてください。前スレと一部重複しま
すがご勘弁を。
エラーが出るのは以下のコードです。
AssignFile(LogF,Fname);
if FileExists(Fname) then begin //(1)
Reset(LogF); //(2)
for i :=0 to FileSize(LogF) - 1 do begin
Read(LogF,Mess);
if (Mess.From = f) and (Mess.Subject = s) and (Mess.Head = h)
and (Mess.MesID = M) and (Mess.RcvHead = r) then begin
Result := true;
end;
end;
CloseFile(LogF);
end;
(1)の所でファイルがあることを確認してから(2)でオープンしているのですが、
エラーになるケースがあります。ここまでは前スレに書きました。そして、原
因不明なので、蚤取り眼で追いかけたところ、解ったことがあります。この関
数を呼び出す前にこんなコードがあります。
NMPOP31.GetMailMessage(i);
Mess.From := NMPOP31.MailMessage.From;
Mess.Subject := PzConv1.MIMEHeaderDecode(NMPOP31.MailMessage.Subject);
Mess.Printed := '0';
Mess.Head := DecodeDateTime(NMPOP31.Mailmessage.Head);
Mess.Atached := NMPOP31.MailMessage.Attachments.CommaText;
NMPO3のAtachementはTstringlist型ですので、Commmatetxで文字列に代入し
ています。Atachedはstring[255]で定義しています。この時に、Atachmentsに
一つだけ入ってくる分には何も起りません。とkろが、2個以上入ってくると
上記(2)でエラーになります。昔ながらの方法で
{$I-}
Reset(LogF);
SHowmessage(IntToStr(IORsult));
{$I-}
としてみると、エラーコードとして「2」が返ってきます。どうもAtachementsが
複数の値を持っていると、何かメモリエリアが破壊されているような感じを
受けます。似たようなコードは他のプログラムで何度か書いていますが、こんな
不可解な現象は初めてです。
もうずいぶん長い間これが解決でできず、表題のような状態になりました。
どなたか何かお気づきの点がありましたらどうか教えてください。
|