var
iFileHandle: Integer;
iFileLength: Integer;
iBytesRead: Integer;
Buffer: PChar;
i: Integer;
str:String;
begin
iFileHandle := FileOpen('C:\test.t', 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
str := str + IntToStr(Integer(Buffer[i]));
end;
end;
在delphi中其中读写函数的buffer声明,
function FileRead(Handle: Integer; var Buffer; Count: Integer): Integer;
function FileWrite(Handle: Integer; const Buffer; Count: Integer): Integer;
当在本地函数声明Buffer为PChar类型,意识是char 类型指针.即在Buffer所指的是一个char类型的地址.
如果直接写为FileRead(handle,Buffer,count)时,是不能正确读写数据的.看上去是把Buffer作为指针传入,但在Delphi中,该FileRead用Buffer参数,不能直接传递指针,而是需要传递指针所指的地址.因而得用Buffer^方式传入.
当const Buffer说明必须是常量地址,因而直接用Buffer的话,则实际上把指针地址传入.也就是存放地址的变量地址传入,无疑是读写不出.
而用var Buffer,则表示Buffer应该是可以改写内容的地址,而若直接写入Buffer,则就是把存放地址的变量地址传入.毁掉的也只是buffer中所指的地址.
和c有些不同.在实际出现这样的问题,不得不察.