zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    springboot 集成 SMTP 发送邮件
    springmvc的controller中使用@Transactional无效
    Apache POI Java Excel easypoi
    java import和import static的区别
    ave an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IS
    未能加载文件或程序集“System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”或它的某一个依赖项
    matlab练习索引
    matlab练习程序(DWA)
    matlab练习程序(解西尔维斯特、李雅普诺夫方程)
    matlab练习程序(NDT)
  • 原文地址:https://www.cnblogs.com/martian6125/p/9631015.html
Copyright © 2011-2022 走看看