TMemoryStream、String与OleVariant互转
来源:互联网 发布:匹配滤波器 矩阵算法 编辑:程序博客网 时间:2024/06/06 00:14
TMemoryStream、String与OleVariant互转
////////////////////////////////////////////////////////////////////////////////
//功能: STRING 的内容流化到 OLEVARIANT 中
//参数:
////////////////////////////////////////////////////////////////////////////////
function TextToOleData(const AText: string): OleVariant;
var
nSize: Integer;
pData: Pointer;
begin
nSize := Length(AText);
if nSize = 0 then
Result := Null
else begin
Result := VarArrayCreate([0, nSize - 1], varByte);
pData := VarArrayLock(Result);
try
Move(Pchar(AText)^, pData^, nSize);
finally
VarArrayUnlock(Result);
end;
end;
end;
////////////////////////////////////////////////////////////////////////////////
//功能: 由 OLEVARIANT 中加载 STRING 的内容
//参数:
////////////////////////////////////////////////////////////////////////////////
function OleDataToText(const AData: OleVariant): string;
var
nSize: Integer;
pData: Pointer;
begin
if AData = Null then
Result := ''
else begin
nSize := VarArrayHighBound(AData, 1) - VarArrayLowBound(AData, 1) + 1;
SetLength(Result, nSize);
pData := VarArrayLock(AData);
try
Move(pData^, Pchar(Result)^, nSize);
finally
VarArrayUnlock(AData);
end;
end;
end;
//转换OLEVariant和TMemoryStream:
function MemoryStreamToOleVariant(Strm: TMemoryStream): OleVariant;
var
Data: PByteArray;
begin
Result := VarArrayCreate([0, Strm.Size - 1], varByte);
Data := VarArrayLock(Result);
try
Strm.Position := 0;
Strm.ReadBuffer(Data^, Strm.Size);
finally
VarArrayUnlock(Result);
end;
end;
function OleVariantToMemoryStream(OV: OleVariant): TMemoryStream;
var
Data: PByteArray;
Size: integer;
begin
Result := TMemoryStream.Create;
try
Size := VarArrayHighBound (OV, 1) - VarArrayLowBound(OV, 1) + 1;
Data := VarArrayLock(OV);
try
Result.Position := 0;
Result.WriteBuffer(Data^, Size);
finally
VarArrayUnlock(OV);
end;
except
Result.Free;
Result := nil;
end;
end;
function RecordsetToVariant(const Recordset: _Recordset; var Stream: OleVariant): boolean;
var
RS: OleVariant;
vData:TMemoryStream;
begin
Result := false;
if Recordset = nil then Exit;
vData:=TMemoryStream.Create;
try
RS := CreateOleObject('ADODB.Recordset');
RS := Recordset;
RS.Save(TStreamAdapter.Create(vData) as IUnknown, adPersistADTG);
vData.Position := 0;
Result := true;
Stream:=MemoryStreamToOleVariant(vData);
except
on E:Exception do
begin
RS:=E.Message;
Stream:=RS;
Result:=False;
end;
end;
end;
function RecordsetFromVariant(vdata: OleVariant): _Recordset;
var
RS: OleVariant;
Stream:TMemoryStream;
begin
Result := nil;
Stream:=TMemoryStream.Create;
Stream:=OleVariantToMemoryStream(vdata);
if Stream.Size < 1 then Exit;
try
Stream.Position := 0;
RS := CreateOleObject( 'ADODB.Recordset');
RS.Open(TStreamAdapter.Create(Stream) as IUnknown);
Result := IUnknown(RS) as _Recordset;
finally;
end;
end;
- TMemoryStream、String与OleVariant互转
- TMemoryStream、String与OleVariant互转
- TMemoryStream、String与OleVariant互转
- TMemoryStream、String与OleVariant互转
- [C++ Builder] TMemoryStream 与 AnsiString 互转
- 文件与Olevariant
- OleVariant 与 Variant
- 怎样将TMemoryStream附值给一个string类型
- Delphi:TMemoryStream类--二进制大对象与数据库的交互
- Delphi:TMemoryStream类--二进制大对象与数据库的交互
- String,String[]与ArrayList<String>互转
- 保存数据到 olevariant
- DATASNAP 中的 OleVariant
- Delphi OleVariant 内存泄露
- 对TMemoryStream的一些改进(Tmemorystream copyFrom)
- 有关TMemoryStream的Write
- delphi TMemoryStream对象用法
- delphi TMemoryStream对象用法
- Django框架
- WebView android sdk 25加载“file:///..."失败解决
- 统计学学习的博客转载
- 理解JVM(4)垃圾回收
- pip和easyinstall区别
- TMemoryStream、String与OleVariant互转
- 解释器构造实践-ANTLR(二)
- 输入一个表达式,表达式中包括三种括号“()”、“[]”和“{}”,判断该表达式的括号是否匹配。
- Java后台框架篇--spring Batch实现数据库大数据量读写
- ffmpeg+SDL的使用之获取视频帧将其存储为PPM格式图片
- 数据结构算法(一)--有序线性表的合并和交集
- Linux-进程间通讯-管道
- 我们从那里来—NG子宫日记 Womb
- 循环队列的应用——舞伴配对问题:在舞会上,男、女各自排成一队。舞会开始时,依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲。假设初始男、女人数及性别