通常情况下,传递较大型的数据,需要自己添加服务器端方法,传递数据封包(例如将大数据编码后以VarArray of Byte传递到服务器)

解决方案 »

  1.   

    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;
      

  2.   

    上述代码,是将文件转化为OleVariant,然后又将Olevariant还原为文件。
    传递到服务器,只要在服务器端定义一个方法,那么就可以了,参数可以使用OleVariant。
      

  3.   

    呵呵,你认为COM可以传递流吗?
      

  4.   

    好象可以。不知是否对。
    我的一个MTS程序没有调试去来,不知你是否有空?
      

  5.   

    chechy:
    我在MTS/COM+环境中是可以传递流,为什么你说不?
      

  6.   

    那么流对应到COM的什么类型呢?
      

  7.   

    1.用variant (*)来可以
    2.HResult (*)
      

  8.   

    Tense(何必):
    COM不能传递流。如果你能传递,那么……你太厉害了,你超越了COM