2010-11-19 23 views
1

Bir Akıştan okumalı ve arabelleği OleVariant (VarArray) değişkenine koymam gerekiyor.Bir TStream'den gelen bir Olevariant değişkenine nasıl bir değer atayabilirim?

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; 

soru i olevariant değişkene TMemoryStream den çok okunan değer atayabilirsiniz nasıl?

i OleVariant verileri gösteren bir işaretçi almak için VarArrayLock işlevini kullanın ve sonra bu işaretçi okuyabilir delphi 5.

cevap

6

kullanıyorum'.

Bu kodu VarArray öğesinin varByte öğelerinden birini kullanarak kullanın.

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

Verileri, doğru boyutta bir diziye ayarlamanız gerekir! Yani önce 'Veri: = VarArrayCreate ([0, MemoryStream.Size - 1], varByte);', sonra da 'DataPtr: = VarArrayLock (Data) ile devam edin;' –

+0

Teşekkürler, bu satırı koda koymayı unuttum. kod düzenlenmiştir. – RRUZ

İlgili konular