我如何为来自TStream的Olevariant变量赋值?

Sal*_*dor 1 delphi memory-management stream variant

我需要从Stream读取并将缓冲区重新放入OleVariant(VarArray)变量中.

var
MemoryStream : TMemoryStream;
Data : OleVariant;
begin
            MemoryStream:=TMemoryStream.Create;
            try
                FuncFill(MemoryStream); //Filling the stream
                MemoryStream.Seek(0,0);
                MemoryStream.Read(Data, MemoryStream.Size);//this line lock tha app, i need allocate the memory for the OleVariant variable?
            finally
             MemoryStream.Free;
            end;

end;
Run Code Online (Sandbox Code Playgroud)

现在的问题是我怎么可以从指定readed值TMemoryStreamolevariant变量?

我正在使用delphi 5.

RRU*_*RUZ 6

您可以使用该VarArrayLock函数获取指向OleVariant数据的指针,然后读取此指针.

检查此代码使用 VarArrayvarByte元素.

var
 MemoryStream : TMemoryStream;
 Data : OleVariant;
 DataPtr : Pointer;
begin
   MemoryStream:=TMemoryStream.Create;
     try
      FuncFill(MemoryStream); //Filling the stream
      MemoryStream.Seek(0,0);
          Data    :=VarArrayCreate([0, MemoryStream.Size - 1], varByte);
      DataPtr     :=VarArrayLock(Data);
       try
         MemoryStream.ReadBuffer(DataPtr^,MemoryStream.Size); //Get the pointer to the variant variable.
       finally
         VarArrayUnlock(Data); //when you are done , you must call to VarArrayUnlock
       end;
    finally
      MemoryStream.Free;
    end;    
end;
Run Code Online (Sandbox Code Playgroud)