在DCOM三层结构中如何传输WORD文件,并进行加密存储,服务端方法的数据类型如何选择?有代码吗?200分

解决方案 »

  1.   

    使用安全数组。
    服务器端:
    procedure TEasyDComServer.GetFileStream(var fStream, opResult: OleVariant);
    var
      P : Pointer;
      S : String;
      L : LongInt;
      mStream : TMemoryStream;
    begin
        L := VarArrayHighBound(fStream,1)-VarArrayLowBound(fStream,1)+1;
        SetLength(S,L);
        P := VarArrayLock(fStream);
        try
          Move(P^,S[1],L);
        finally
          VarArrayUnlock(fStream);
        end;
        mStream := TMemoryStream.Create;
        mStream.SetSize(L);
        mStream.WriteBuffer(Pointer(S)^,L);
        mStream.SaveToFile('d:\0004.doc');
        opResult := '!!'+Copy(s,1,10);
      mStream.Free;
    end;
    客户端:
    procedure TForm1.BitBtn2Click(Sender: TObject);
    var
      P : Pointer;
      L : LongInt;
      mStream    : TMemoryStream;
      V,opResult : Variant;
    begin
      If OpDlg.Execute then begin
        try begin
          mStream := TMemoryStream.Create;
          mStream.LoadFromFile(OpDlg.FileName);
          L := mStream.Size;
          V := VarArrayCreate([0,L-1],varByte);
          P := VarArrayLock(V);
          try
            //Move()
            mStream.ReadBuffer(P^,L);
          finally
            VarArrayUnlock(V);
          end;
          socketConnection1.Connected := True;
          socketConnection1.AppServer.GetFileStream(V,opResult);
          Memo1.Lines.Add('Return value is:'+opResult);
        end;
        finally
          mStream.Free;
        end;
      end;
    end;我使用的是服务器端通过安全数组获取字符流数据,再存入服务器端的硬盘中,对于大文件比较困难,我在本机上传40M文件花了1分钟。解决方法就是将数据分组,到服务器端拼装。我也只是参考《Delphi 5开发人员指南》上写的,有什么不妥请指正!