2010-11-19 23 views
1

Je dois lire à partir d'un flux et mettre le tampon lu dans une variable OleVariant (VarArray).Comment puis-je attribuer une valeur à une variable Olevariant provenant d'un TStream?

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; 

La question est de savoir comment je peux affecter la valeur readed de la TMemoryStream à une variable olevariant?

i » je utilise delphi 5.

Répondre

6

Vous pouvez utiliser la fonction VarArrayLock pour obtenir un pointeur vers les données de OleVariant puis lire ce pointeur.

Vérifiez ce code qui utilise un VarArray de varByte éléments.

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

Vous devez définir des données dans un tableau de la bonne taille! Donc d'abord faire 'Data: = VarArrayCreate ([0, MemoryStream.Size - 1], varByte);', puis continuer avec 'DataPtr: = VarArrayLock (Data);' –

+0

Merci, j'ai oublié de mettre cette ligne dans le code. code édité. – RRUZ