Q&A

  • D6에서 동적파일열기에서 에러
안녕 하세요 ?

파일을 읽어 동적배열이나 동적메모리할당을 하다가
알수없는 에러가 자꾸나 문의 드립니다.

환경은 한글Win2000pro D6에 Update2이고

예제는 델파이 헬프에 있는 예제를 그대로 썼습니다.
하지만 알수없는 에러가 발생합니다.
델파이 헬프에 있는 예제는 다음과 같습니다.

procedure TForm1.Button1Click(Sender: TObject);

var
  iFileHandle: Integer;
  iFileLength: Integer;
  iBytesRead: Integer;
  Buffer: PChar;
  i: Integer
begin
  if OpenDialog1.Execute then
  begin
    try
      iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
      iFileLength := FileSeek(iFileHandle,0,2);
      FileSeek(iFileHandle,0,0);
      Buffer := PChar(AllocMem(iFileLength + 1));
      iBytesRead := FileRead(iFileHandle, Buffer, iFileLength);
      FileClose(iFileHandle);

      for i := 0 to iBytesRead-1 do
      begin
        StringGrid1.RowCount := StringGrid1.RowCount + 1;
        StringGrid1.Cells[1,i+1] := Buffer[i];
        StringGrid1.Cells[2,i+1] := IntToStr(Integer(Buffer[i]));
      end;
    finally
      FreeMem(Buffer);
    end;
  end;
end;

이걸 IDE환경에서 실행시키면 스트링그리드쪽에서 에러~
실행파일을 만들어 윈도우상에서 실행시키면 파일을 읽은후 바로
폼이 닫힙니다.
아마도 메모리 할당에서 문제가 생기는것 같기도 합니다.
제가 봤을땐 아무 이상이 없어 보이는데 미치겠습니다.
혹시 다른분이 D5나 D6를 가지고 계신분은 한번 테스트해 봐주세요

2  COMMENTS
  • Profile
    최용일 2002.12.21 05:49
    안녕하세요. 최용일입니다.

    파일읽는 부분이 좀 잘못됬네요...

    아래와 같이 고치세요...
          iBytesRead := FileRead(iFileHandle, Buffer^, iFileLength);

    ^^ 항상 즐코하세요...

  • Profile
    이수환 2002.12.23 09:38
    델파이 헬프 예제가 오타가 있었군요
    헬프 예제가 틀릴줄은 몰랐습니다.
    답변 감사합니다.
    즐거운 연말 보내세요