1

我需要从 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 the app, I need allocate the memory for the OleVariant variable?
            finally
             MemoryStream.Free;
            end;

end;

如何将读取的值分配给TMemoryStream变量olevariant

我正在使用德尔福 5。

4

1 回答 1

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;
于 2010-11-19T15:05:40.123 回答