现在需要能传送文件或数据库中的2进制流。请问各位朋友有什么办法吗?

解决方案 »

  1.   

    能啊,给你两个函数,可以将文件打包成OleVariant,并且解包。通过OleVariant,可以用方法传递。
    function FileToVariant(FileName: String): OleVariant; 
    var 
      AStream: TFileStream; 
      MyBuffer: Pointer; 
    begin 
      AStream:=TFileStream.create(FileName,fmOpenRead); 
      try 
        aStream.Seek(0, soFromBeginning); 
        Result:=VarArraycreate([0, AStream.size-1], VarByte); 
        MyBuffer:=VarArrayLock(Result); 
        AStream.ReadBuffer(MyBuffer^, AStream.Size); 
        VarArrayUnlock(Result); 
      finally 
        AStream.Free; 
      end; 
    end; 
    procedure VariantToFile(FileName: String; var AVariant: OleVariant); 
    var 
      AStream: TFileStream; 
      MyBuffer: Pointer; 
      Size: Integer; 
    begin 
      AStream:=TFileStream.create(FileName,fmCreate); 
      try 
        aStream.Seek(0, soFromBeginning); 
        Size:=VarArrayHighBound(AVariant,1)-VarArrayLowBound(AVariant,1)+1; 
        MyBuffer:=VarArrayLock(AVariant); 
        AStream.WriteBuffer(MyBuffer^, Size); 
        VarArrayUnlock(AVariant); 
      finally 
        AStream.Free; 
      end; 
    end;