• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > Delphi中比較GUID是否相等

    Delphi中比較GUID是否相等

    作者: 時間:2011-06-27 來源:網絡 收藏

    1、CompareMem(@guid1, @guid2, SizeOf(T))
    最開始時想到的方法。
    查看中T的定義可以看到T實際上是一個結構。對于結構的來說最方便的就是內存直接了。
    TGUID = packed record
    D1: LongWord;
    D2: Word;
    D3: Word;
    D4: array[0..7] of Byte;
    end;

    本文引用地址:http://www.czjhyjcfj.com/article/150560.htm

    2、SysUtils.IsEqualGUID(const guid1, guid2: TGUID)
    經人提醒后發現在SysUtils單元已經有了一個這樣專門GUID的函數。查看SysUtils的源碼可以看到,在Windows下直接調用ole32.dll的函數IsEqualGUID,在Linux下將GUID轉換成整型數組然后比較數組中的每個元素。效果和上面的CompareMem一樣。
    {$IFDEF MSWINDOWS}
    function IsEqualGUID; external 'ole32.dll' name 'IsEqualGUID';
    {$ENDIF MSWINDOWS}
    {$IFDEF LINUX}
    function IsEqualGUID(const guid1, guid2: TGUID): Boolean;
    var
    a, b: PIntegerArray;
    begin
    a := PIntegerArray(@guid1);
    b := PIntegerArray(@guid2);
    Result := (a^[0] = b^[0]) and (a^[1] = b^[1]) and (a^[2] = b^[2]) and (a^[3] = b^[3]);
    end;
    {$ENDIF LINUX}
    當然,我們可以一次比較TGUID中的字段D1、D2、D3、D4,但這種方法顯然就沒有轉成數組后比較那么簡潔了。

    上面提到的兩種方法都可以用,并且在效率上也差不多。不過出于通用性的考慮,建議用封裝的函數SysUtils.IsEqualGUID更好。



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 新乡市| 元朗区| 屯门区| 彰化县| 喀喇| 蒲江县| 连云港市| 西宁市| 霸州市| 漯河市| 辽中县| 通榆县| 芜湖市| 邯郸县| 武山县| 开阳县| 遂溪县| 临桂县| 鲁山县| 景东| 铅山县| 隆化县| 高密市| 襄汾县| 霍邱县| 天峻县| 佳木斯市| 平南县| 会理县| 潼南县| 彭阳县| 从江县| 淮滨县| 乐都县| 自治县| 瑞金市| 财经| 南京市| 周至县| 馆陶县| 福州市|