久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Delphi 變體類型(Variant)的介紹(流與變體類型的相互轉(zhuǎn)換,、變體類型常用的函數(shù)...

 aaie_ 2014-01-08

一,、變體類型常用的函數(shù)介紹:

        Variant: 一種可以擁有各種數(shù)據(jù)類型; 也可以告訴目前存儲(chǔ)的數(shù)據(jù)是什么類型(通過使用VarType函數(shù)),; 可以給相同的Variant分配不同的數(shù)據(jù)類型,只要Variant包含數(shù)字值就可以執(zhí)行算法,; variant數(shù)組只不過是variant型的數(shù)組,,不必包含同類型的數(shù)據(jù);

1,、  VarArrayOf函數(shù):更快捷的創(chuàng)建一維變體數(shù)組,,可以創(chuàng)建全異的數(shù)值數(shù)組;
function VarArrayOf(const Values: array of Variant): Variant;

        VarArrayOf是一種快速(寫代碼快而不是運(yùn)行快)的方法生成一個(gè)一維Variant數(shù)據(jù)的方法,,它接受一個(gè)Variant類型的Open Array,,用這個(gè)數(shù)據(jù)生成一個(gè)一維的Variant Array of Variant(類型為Variant)。由于Delphi對Open Array類型參數(shù)的支持,,使你可以用一行語句生成一個(gè)數(shù)組,。不過它有兩個(gè)缺陷:只能生成一維數(shù)組;只能生成元素類型是Variant的數(shù)組,。使用Variant數(shù)組, 與使用標(biāo)準(zhǔn)Delphi數(shù)組類似,;
例如: MyArray := VarArrayOf(['李維',, 30, '60', 60.369, 'China']);

2,、  VarArrayCreate函數(shù):
function VarArrayCreate(const Bounds: array of Integer; VarType: TVarType): Variant;

        Bounds: 告訴數(shù)組的上下界,; VarType: 決定了數(shù)組的中存儲(chǔ)什么類型的數(shù)據(jù)。其它的數(shù)組(如二維,、或者其他類型等)只能用VarArrayCreate去創(chuàng)建,,并用循環(huán)給元素賦值。
例如:創(chuàng)建數(shù)組的數(shù)組, 可以模仿任何類型的數(shù)據(jù)結(jié)構(gòu)類型:
            VarArrayX := VarArrayCreate([1,10], varVariant);
數(shù)組的單個(gè)元素可以裝載一個(gè)數(shù)組: VarArrayX[1] := VarArrayCreate([1,5], varVariant);

3,、VarArrayHighBound,、VarArrayLowBound函數(shù):返回變體數(shù)組上/下限,從1開始(1:列,;2:行,;3:3維的最后一維)。
function VarArrayHighBound(const A: Variant; Dim: Integer): Integer;

4,、VarArrayRedim函數(shù):修改variant數(shù)組的最高限,。
procedure VarArrayRedim(A: Variant; HighBound: Integer);

5、VarArrayDimCount函數(shù):返回variant數(shù)組維數(shù)
unction VarArrayDimCount(const A: Variant): Integer;

6,、VarArrayLock,、VarArrayUnLock函數(shù):避免運(yùn)行時(shí)刻檢查。一般用于初始化一個(gè)大數(shù)組,。
function VarArrayLock(const A: Variant): Pointer;
procedure VarArrayUnlock(var A: Variant);

        在對Variant數(shù)組的每一個(gè)元素進(jìn)行賦值時(shí),,都要通過運(yùn)行時(shí)邏輯來檢查并判斷數(shù)據(jù)類型的兼容性、每個(gè)元素的位置等等,。為了避免運(yùn)行時(shí)檢查,,要用VarArrayLock()函數(shù)和VarArrayUnlock()過程。VarArrayLock()函數(shù)在內(nèi)存中鎖定數(shù)組,,使數(shù)組不再移動(dòng)和改變大小,,并能返回一個(gè)指向數(shù)組數(shù)據(jù)的指針。而VarArrayUnlock()過程用來對VarArrayLock()函數(shù)鎖定的數(shù)組進(jìn)行解鎖,,使數(shù)組能重新移動(dòng)或改變大小,。在鎖定數(shù)組后,能用更有效的方法對數(shù)組進(jìn)行初始化,。

7,、VarArrayRef函數(shù):獲得variant指向的數(shù)據(jù)
function VarArrayRef(const A: Variant): Variant;

8、VarIsArray函數(shù):是一個(gè)簡單的布爾檢查函數(shù),,判斷是否是一個(gè) Variant數(shù)組,,是則返回True
function VarIsArray(const A: Variant): Boolean; overload;
function VarIsArray(const A: Variant; AResolveByRef: Boolean): Boolean; overload;

9、其他函數(shù)

1>,、VarClear()過程清除Variant變量并將VType域的值設(shè)為varEmpty.
2>,、VarCopy()將Source復(fù)制到Dest,。
3>、VarCast()將一個(gè)Variant轉(zhuǎn)換成指定的類型并存儲(chǔ)在另一個(gè)Variant變量中,。
4>,、VarType()返回指定Variant的varXXX類型代碼。
5>,、VarAsType()跟VarCast()的功能一樣,。
6>、VarIsEmpty()如果一個(gè)Variant變量的類型代碼是varEmpty則返回True,。
7>,、VarIsNull()判斷Variant變量是否包含null值。
8>,、VarToStr()將一個(gè)Variant變量轉(zhuǎn)換成字符串表達(dá)式(如果Variant為varEmpty或varNUll則為空字符串),。
9>、VarFromDateTime()返回一個(gè)Variant變量,,它存放著指定的TDateTime類型的值,。
10>、VarToDateTime()返回在Variant中的TDateTime類型的值,。

二、一個(gè)簡單實(shí)例代碼:

var

  a, b: Variant;

  I, J, K, M: Integer;

begin

  //a是個(gè)一維Variant數(shù)組,,元素類型是Variant,,元素個(gè)數(shù)是3,上界是2,,下界是0,。

  a := VarArrayOf([1234,   'abc ',   Null]);

  //b是一個(gè)16行4列的二維數(shù)組

  b := VarArrayCreate[0, 3, 1, 16],   varOleStr);

 I := VarArrayHighBound(b, 1); // I是b的最大列號(hào):3;

  J := VarArrayLowBound(b, 1); // J是b的最小列號(hào):0,;

  K := VarArrayHighBound(b, 2); // K是b的最大行號(hào):16,;

  M := VarArrayLowBound(b, 2); // M是b的最小行號(hào):1。

end;

注意,,Variant數(shù)組下標(biāo)是列在前,,行在后,元素類型是PWideChar,,最大列號(hào)是3,,最小列號(hào)是0,最大行號(hào)是16,,最小行號(hào)是1,。

三、變體類型和流的相互轉(zhuǎn)換

//1,、 變體類型轉(zhuǎn)成流

procedure VariantToStream(const Data: OleVariant; Stream: TStream);

var

  p: Pointer;

begin

  p := VarArrayLock(Data);  // 加鎖,,并返回一個(gè)指針指向的數(shù)據(jù),。 避免運(yùn)行時(shí)時(shí)刻檢查

  try

    Stream.Write(p^, VarArrayHighBound(Data,1) + 1);  // 返回最大的列號(hào)

  finally

    VarArrayUnlock(Data); // 解鎖,使數(shù)組能重新移動(dòng)或改變大小,。

  end;

end;

 

// 2,、流轉(zhuǎn)成變體類型

function StreamToVariant(Stream: TStream): OleVariant;

var

  p: Pointer;

begin

  Result := VarArrayCreate([0, Stream.Size - 1], varByte);// 創(chuàng)建一個(gè)以為的數(shù)組。類型為varByte

  p := VarArrayLock(Result);

  try

    Stream.Position := 0;  // 設(shè)置流的位置

    Stream.Read(p^, Stream.Size);

  finally

    VarArrayUnlock(Result);

  end;

end;

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多