全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1386
推到 Plurk!
推到 Facebook!

如何把 OleVariant 轉為 TStream ??

缺席
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-16 10:56:23 IP:61.218.xxx.xxx 未訂閱
請教各位前輩!    如何把 OleVariant 轉為 TStream ??    我參考 ha0009 版主 的 StreamToByteArrayVarian  http://delphi.ktop.com.tw/topic.php?TOPIC_ID=34567    如下  
 
// TStream -->OleVariant
function StreamToByteArrayVariant (s : TStream) : OleVariant;
var
  Size : longint;
  Data : Pointer;
  Tmp : Variant;
begin
  Size := S.Size;
  Tmp := VarArrayCreate([0, Size - 1], varByte);
  Data := VarArrayLock (Tmp);
  try
    S.Position := 0;
    S.ReadBuffer(Data^, Size);
  finally
    VarArrayUnLock (Tmp);
  end;
  result := Tmp;
end;    但不知如何再傳回來??    自己寫了以下的程式,但會錯誤??    // OleVariant-->   TStream
function ByteArrayVariantToStream (OleV : OleVariant) :TStream ;
var
  s :TStream;
  Data : Pointer;
begin        Data := VarArrayLock (OleV);      s := TStream.Create;      s.WriteBuffer( Data^,length(OleV)) ;
  result := s;
end;    謝謝各位前輩!!感動 這網站讓我感動!!    
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-16 14:20:42 IP:61.218.xxx.xxx 未訂閱
procedure VariantToStream (const V: OLEVariant; Stream : TStream); var P : Pointer; begin Stream.size := VarArrayHighBound (V, 1) - VarArrayLowBound (V, 1) 1; P := VarArrayLock (V); Stream.Position := 0; Stream.Write (P^, Stream.Size); VarArrayUnlock (V); Stream.Position := 0; end; procedure StreamToVariant (Stream : TStream; var V: OLEVariant); var P : Pointer; begin V := VarArrayCreate ([0, Stream.Size - 1], varByte); P := VarArrayLock (V); Stream.Position := 0; Stream.Read (P^, Stream.Size); VarArrayUnlock (V); end;
系統時間:2024-05-17 17:56:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!