Q&A

  • 왜 안되나???
델파이 5 헬프에 있는 셈플인데.. 실행이 안되네요.

// 주석문이 쳐져있는 부분입니다.

읽어들이 화일보다 큰 배열로 잡아 읽어들이면. 되는데..

Buffer를 PChar로 잡고 윈도우 함수 AllocMem 을 써니. 안 안 안 돼요.

이유를 알고 싶습니다.



procedure TForm1.Button1Click(Sender: TObject);

var

iFileHandle: Integer;

iFileLength: Integer;

iBytesRead: Integer;

// Buffer : PChar;

// Buffer: Array[0..100000] of Char;

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; // end for

finally

// FreeMem(Buffer);

end; // end try finally

end; // end if

end; // end procedure

1  COMMENTS
  • Profile
    타락천사 2000.05.25 02:24
    안녕하세여.. 타락임다.. ^^



    ^^ 후후



    Buf를 pChar로 선언하고 AllocMem() 하든지,



    Buf를 array [..] of char 로 하든지 둘중의 하나만 하셔야져..^^



    Buf를 두번 선언해서 에라가 나는 겁니다.. ^^



    즐푸..^_____________^



    왕초보 타락천사.



    영이 wrote:

    > 델파이 5 헬프에 있는 셈플인데.. 실행이 안되네요.

    > // 주석문이 쳐져있는 부분입니다.

    > 읽어들이 화일보다 큰 배열로 잡아 읽어들이면. 되는데..

    > Buffer를 PChar로 잡고 윈도우 함수 AllocMem 을 써니. 안 안 안 돼요.

    > 이유를 알고 싶습니다.

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > iFileHandle: Integer;

    > iFileLength: Integer;

    > iBytesRead: Integer;

    > // Buffer : PChar;

    > // Buffer: Array[0..100000] of Char;

    > 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; // end for

    > finally

    > // FreeMem(Buffer);

    > end; // end try finally

    > end; // end if

    > end; // end procedure