2010-11-19 6 views
1

Ich muss aus einem Stream lesen und den Puffer in eine OleVariant (VarArray) Variable einlesen.Wie kann ich einer Olevariant-Variablen, die von einem TStream kommt, einen Wert zuweisen?

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; 

Die Frage ist, wie ich den readed Wert aus den TMemoryStream zu einem olevariant Variablen zuweisen kann?

i‘bin mit delphi 5.

Antwort

6

können Sie die VarArrayLock Funktion verwenden, um einen Zeiger auf die OleVariant Daten zu bekommen und dann zu diesem Zeiger lesen.

Überprüfen Sie diesen Code mit VarArray von varByte Elemente.

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; 
+0

Sie müssen Daten auf ein Array der richtigen Größe einstellen! Also zunächst 'Data: = VarArrayCreate ([0, MemoryStream.Size - 1], varByte);', dann weiter mit 'DataPtr: = VarArrayLock (Data);' –

+0

Danke, ich habe vergessen, diese Zeile in den Code zu schreiben. Code bearbeitet. – RRUZ