如何把 OleVariant 轉為 TStream ?? |
缺席
|
jeffreck
高階會員 發表:247 回覆:340 積分:197 註冊:2003-01-23 發送簡訊給我 |
請教各位前輩! 如何把 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 發送簡訊給我 |
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;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |