Sal*_*dor 1 delphi memory-management stream variant
我需要从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 tha app, i need allocate the memory for the OleVariant variable?
finally
MemoryStream.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
现在的问题是我怎么可以从指定readed值TMemoryStream的olevariant变量?
我正在使用delphi 5.
您可以使用该VarArrayLock函数获取指向OleVariant数据的指针,然后读取此指针.
检查此代码使用 VarArray的varByte元素.
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2385 次 |
| 最近记录: |