//转换函数
//下面是通过流的方式读入一个文本文件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;
 函数匹配
谢谢了。

解决方案 »

  1.   

    你的result 是个string类型
    SetLength(Result,Size);//分配了大小 TFileStream.sizeRead(Pointer(Result)^,size); 
    相当于从一个字符数组(string型)的第一个字符,读取size个字符
      

  2.   

    就是从你的Result的第一个字符开始,读取size个字符。
      

  3.   

    Read(Pointer(Result)^,size); 
    取得串第一个字符里的引用,相当于
    Read(Result[1], Size);
      

  4.   

    Pointer(Result)^=>(@Result[1])^=>Result[1]
      

  5.   

    呵呵其实就是把Result 转乘指针 然后再解引用 
    Delphi的String 索引是从1开始的 pointer转换一把就是转成了PChar
      

  6.   


    那这样岂不是这种用法是错误的?按理说应该是Read(@Result[1], Size)或者Read(Result, Size); 吧....
      

  7.   


    :TStream.Read(var Buffer, Size: Integer): Integer
    注意第一个参数是Var类型,这种类型在C++,C#里叫引用,Delphi中没有找到相关的文档到底叫什么个类型。
    不过我们叫它为引用也是可以的。其实这种类型在D的编译器中还是用指针实现的!还有一个在out类型也是这样
      

  8.   

    function StrAlloc(Size: Cardinal): PChar;
    begin
      Inc(Size, SizeOf(Cardinal));
      GetMem(Result, Size);
      Cardinal(Pointer(Result)^) := Size;
      Inc(Result, SizeOf(Cardinal));
    end;
    你看看SysUtils单元的这个函数,String和PChar你就姑且看作是一样的好了。