//转换函数
//下面是通过流的方式读入一个文本文件FileName,返回string类型
//
function TForm1.BlobContentToString(const FileName: String): String;
begin
with TFileStream.Create(FileName,fmOpenRead) do
try
SetLength(Result,Size);
Read(Pointer(Result)^,size);
finally
Free
end;
end;请问:
1:Pointer(Result)^什么意思
2:如何与TFileStream的Read
function Read(var Buffer; Count: Longint): Longint;
函数匹配
谢谢了。
//下面是通过流的方式读入一个文本文件FileName,返回string类型
//
function TForm1.BlobContentToString(const FileName: String): String;
begin
with TFileStream.Create(FileName,fmOpenRead) do
try
SetLength(Result,Size);
Read(Pointer(Result)^,size);
finally
Free
end;
end;请问:
1:Pointer(Result)^什么意思
2:如何与TFileStream的Read
function Read(var Buffer; Count: Longint): Longint;
函数匹配
谢谢了。
SetLength(Result,Size);//分配了大小 TFileStream.sizeRead(Pointer(Result)^,size);
相当于从一个字符数组(string型)的第一个字符,读取size个字符
取得串第一个字符里的引用,相当于
Read(Result[1], Size);
Delphi的String 索引是从1开始的 pointer转换一把就是转成了PChar
那这样岂不是这种用法是错误的?按理说应该是Read(@Result[1], Size)或者Read(Result, Size); 吧....
:TStream.Read(var Buffer, Size: Integer): Integer
注意第一个参数是Var类型,这种类型在C++,C#里叫引用,Delphi中没有找到相关的文档到底叫什么个类型。
不过我们叫它为引用也是可以的。其实这种类型在D的编译器中还是用指针实现的!还有一个在out类型也是这样
begin
Inc(Size, SizeOf(Cardinal));
GetMem(Result, Size);
Cardinal(Pointer(Result)^) := Size;
Inc(Result, SizeOf(Cardinal));
end;
你看看SysUtils单元的这个函数,String和PChar你就姑且看作是一样的好了。