2010-11-19 3 views
1

스트림에서 읽고 버퍼를 OleVariant (VarArray) 변수에 넣어야합니다.어떻게 TStream에서 오는 Olevariant 변수에 값을 할당 할 수 있습니까?

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; 

문제는 내가 olevariant 변수에 TMemoryStream에서 읽혀질 값을 할당 할 수있는 방법인가?

난 당신이 OleVariant에 데이터에 대한 포인터를 얻기 위해 VarArrayLock 기능을 사용하고이 포인터로 읽을 수있는 델파이 5

답변

6

을 사용하고 있습니다 '.

요소를 사용하는이 코드를 확인하십시오.

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

데이터를 올바른 크기의 배열로 설정해야합니다! 그래서 먼저'Data : = VarArrayCreate ([0, MemoryStream.Size - 1], varByte);'를 실행하고'DataPtr : = VarArrayLock (Data);를 계속 진행하십시오. –

+0

감사합니다. 코드가 편집되었습니다. – RRUZ