亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xpwinbase.pas

?? 類似于Java JUnit的單元測試
?? PAS
字號:
unit XPWinBase;

{
 $Source: /cvsroot/dunit/dunit/Contrib/DUnitWizard/Source/Common/XPWinBase.pas,v $
 $Revision: 1.1 $
 $Date: 2004/05/03 15:07:15 $
 Last amended by $Author: pvspain $
 $State: Exp $

 XPWinBase:
 Interfaces and implementing classes which provide a base
 for Win32 Kernel objects.

 Copyright (c) 2001 by The Excellent Programming Company Pty Ltd
 (Australia) (ABN 27 005 394 918).

 Contact Paul Spain via email: paul@xpro.com.au

 This unit is free software; you can redistribute it and/or
 modify it under the terms of the GNU Lesser General Public
 License as published by the Free Software Foundation; either
 version 2.1 of the License, or (at your option) any later version.

 This unit is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public
 License along with this unit; if not, the license can be viewed at:
 http://www.gnu.org/copyleft/lesser.html
 or write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 Boston, MA  02111-1307  USA
 }

interface

uses
  Windows,    // THandle,  CreateXXX(), OpenXXX
  SysUtils;   // Exception, Trim(), FmtStr(), AnsiPos(),
              // AnsiLowerCase()

{$IFDEF XPW32E}
type

  EXPWin32 = class (Exception) end;

    EXPWin32Handle = class (EXPWin32) end;
{$ENDIF}

//////////////////////////////////////////////////////////////////////////////
///   IXPWinError
//////////////////////////////////////////////////////////////////////////////

type

  IXPWinError = interface
    ['{B53D5BE1-3BC8-11D5-A2BB-00608CF441D9}']
    function HasErred: boolean;
    function GetLastError: cardinal;
    function GetLastErrorText: string;
    function GetLastContext: string;
    procedure Reset;
    end;

{$IFDEF XPW32E}
  TTEXPWin32 = class of EXPWin32;
{$ENDIF}

  TXPWinError = class(TInterfacedObject, IXPWinError)
    private

    FLastError: cardinal;
    FLastContext: string;
{$IFDEF XPW32E}
    FException: TTEXPWin32;
{$ENDIF}

    protected

{$IFDEF XPW32E}
    procedure SetException(const AException: TTEXPWin32);
{$ENDIF}

    procedure Error(const Context: string);
    procedure SetLastError(const Value: cardinal = 0);
    procedure SetLastContext(const Context: string);

    //
    // IXPWinError implementation
    //

    function HasErred: boolean;
    procedure Reset;
    function GetLastError: cardinal;
    function GetLastErrorText: string;
    function GetLastContext: string;


    public

{$IFDEF XPW32E}
    constructor Create(AException: TTEXPWin32);
{$ELSE}
    constructor Create;
{$ENDIF}

    end;

//////////////////////////////////////////////////////////////////////////////
///   IXPWinHandle
//////////////////////////////////////////////////////////////////////////////

type

  { Reference to a Windows handle which looks after its own closure.
    Used by kernel objects which can return multiple handles. }
  IXPWinHandle = interface(IXPWinError)
    ['{EC93EF02-1092-11D5-A266-00608CF441D9}']
    function IsSignaled: boolean;
    function GetHandle: THandle;
    function Wait: boolean;
    function WaitFor(const Millisecs: cardinal): boolean;
    property Handle: THandle read GetHandle;
    end;

  TXPWinHandle = class(TXPWinError, IXPWinHandle)
    private

    FHandle: THandle;

    //
    // IXPWinHandle implementation
    //

    function GetHandle: THandle;

    protected

    function IsSignaled: boolean; virtual;
    function Wait: boolean; virtual;
    function WaitFor(const Millisecs: cardinal): boolean; virtual;

    public

    constructor Create(AHandle: THandle);
    destructor Destroy; override;
    end;

//////////////////////////////////////////////////////////////////////////////
///   IXPWinNamedKernelObject
//////////////////////////////////////////////////////////////////////////////

type

  TXPKOInstance = (koUnknown, koCreated, koOpened);

  IXPWinNamedKernelObject = interface(IXPWinHandle)
    ['{0BCC42D3-1528-11D5-A26D-00608CF441D9}']
    function GetName: string;
    function GetInstance: TXPKOInstance;
    property Name: string read GetName;
    property Instance: TXPKOInstance read GetInstance;
    end;

  TXPWinKernelObject = class(TXPWinError)
    protected

    FSecurityAttributes: TSecurityAttributes;

    public

    constructor Create(const Inheritable: boolean;
      const SecurityDescriptor: Pointer);
    end;

  TXPWinNamedKernelObject = class(TXPWinKernelObject, IXPWinHandle,
    IXPWinNamedKernelObject)
    private

    function CustomWait(const Timeout: cardinal): boolean;

    protected

    FName: string;
    FHandle: THandle;
    FInstance: TXPKOInstance;

    //
    // IXPWinHandle implementation
    //

    function IsSignaled: boolean; virtual;
    function GetHandle: THandle;
    function Wait: boolean; virtual;
    function WaitFor(const Millisecs: cardinal): boolean; virtual;

    //
    // IXPWinNamedKernelObject implementation
    //

    function GetName: string;
    function GetInstance: TXPKOInstance;

    public

    constructor Create(const AName: string; const Inheritable: boolean;
      const SecurityDescriptor: Pointer);
    destructor Destroy; override;
    class function UniqueName: string;
    end;

//////////////////////////////////////////////////////////////////////////////
///   Creator functions: unit entry points
//////////////////////////////////////////////////////////////////////////////

function CreateHandle(const AHandle: THandle): IXPWinHandle;

//////////////////////////////////////////////////////////////////////////////
///   Global utility functions 
//////////////////////////////////////////////////////////////////////////////

function CreateGUIDAsString: string;
function Win32ErrorText(const ErrorCode: cardinal): string;

implementation

uses
  ActiveX;    // CoCreateGUID

const CVSID: string = '$Header: /cvsroot/dunit/dunit/Contrib/DUnitWizard/Source/Common/XPWinBase.pas,v 1.1 2004/05/03 15:07:15 pvspain Exp $';

//////////////////////////////////////////////////////////////////////////////
///   IXPWinError implementation
//////////////////////////////////////////////////////////////////////////////

const
  XPWinNoError = ERROR_SUCCESS;

{$IFDEF XPW32E}

constructor TXPWinError.Create(AException: TTEXPWin32);
  begin
  inherited Create;
  FLastError := XPWinNoError;
  SetException(AException);
  end;

procedure TXPWinError.SetException(const AException: TTEXPWin32);
  begin
  FException := AException;
  end;

{$ELSE}

constructor TXPWinError.Create;
  begin
  inherited Create;
  FLastError := XPWinNoError;
  end;

{$ENDIF}

procedure TXPWinError.Error(const Context: string);
  begin
  SetLastError;
  SetLastContext(Context);
{$IFDEF XPW32E}
  raise FException.CreateFmt(GetLastContext + ': Win32 Error %d: %s',
    [GetLastError, GetLastErrorText]);
{$ENDIF}
  end;

function TXPWinError.GetLastError: cardinal;
  begin
  Result := FLastError;
  end;

function TXPWinError.GetLastErrorText: string;
  begin
  Result := Win32ErrorText(FLastError);
  end;

function TXPWinError.GetLastContext: string;
  begin
  Result := FLastContext;
  end;

function TXPWinError.HasErred: boolean;
  begin
  Result := FLastError <> XPWinNoError;
  end;

procedure TXPWinError.Reset;
  begin
  FLastError := XPWinNoError;
  System.SetLength(FLastContext, 0);
  end;

procedure TXPWinError.SetLastError(const Value: cardinal);
  begin

  if Value = 0 then
    FLastError := Windows.GetLastError
  else
    FLastError := Value;

  end;

procedure TXPWinError.SetLastContext(const Context: string);
  begin
  FLastContext := Context;
  end;

///////////////////////////////////////////////////////////////////////////////
///     IXPWinHandle implementation
///////////////////////////////////////////////////////////////////////////////

constructor TXPWinHandle.Create(AHandle: THandle);
  begin
{$IFDEF XPW32E}
  inherited Create(EXPWin32Handle);
{$ELSE}
  inherited Create;
{$ENDIF}
  FHandle := AHandle;
  end;

destructor TXPWinHandle.Destroy;
  begin
  Windows.CloseHandle(FHandle);
  inherited Destroy;
  end;

function TXPWinHandle.IsSignaled: boolean;
  begin
  Result := false;
  end;

function TXPWinHandle.Wait: boolean;
  begin
  Result := true;
  end;

function TXPWinHandle.WaitFor(const Millisecs: cardinal): boolean;
  begin
  Result := true;
  end;

function TXPWinHandle.GetHandle: THandle;
  begin
  Result := FHandle;
  end;

///////////////////////////////////////////////////////////////////////////////
///     TXPWinKernelObject implementation
///////////////////////////////////////////////////////////////////////////////

constructor TXPWinKernelObject.Create(const Inheritable: boolean;
  const SecurityDescriptor: Pointer);
  begin
{$IFDEF XPW32E}
  inherited Create(EXPWin32);
{$ELSE}
  inherited Create;
{$ENDIF}

  with FSecurityAttributes do
    begin
    nLength := SizeOf(FSecurityAttributes);
    lpSecurityDescriptor := SecurityDescriptor;
    bInheritHandle := Inheritable;
    end;

  end;

///////////////////////////////////////////////////////////////////////////////
///     TXPWinNamedKernelObject implementation
///////////////////////////////////////////////////////////////////////////////

constructor TXPWinNamedKernelObject.Create(const AName: string;
  const Inheritable: boolean; const SecurityDescriptor: Pointer);
  begin
  inherited Create(Inheritable, SecurityDescriptor);

  { Create a "unique"  name if none is passed. }
  if System.Length(SysUtils.Trim(AName)) = 0 then
    FName := UniqueName
  else
    FName := AName;

  FHandle := INVALID_HANDLE_VALUE;
  FInstance := koUnknown;
  end;

function TXPWinNamedKernelObject.GetInstance: TXPKOInstance;
  begin
  Result := FInstance;
  end;

destructor TXPWinNamedKernelObject.Destroy;
  begin

  if FHandle <> INVALID_HANDLE_VALUE then
    Windows.CloseHandle(FHandle);

  inherited Destroy;
  end;

class function TXPWinNamedKernelObject.UniqueName: string;
  var
  Count: int64;

  begin

  if Windows.QueryPerformanceCounter(Count) then
    // Create a number which (hopefully) uniquely identifies the calling context
    // in machine-space (current thread ID) and time (high res counter value).
    SysUtils.FmtStr(Result, '%d.%d', [Windows.GetCurrentThreadID, Count])
  else
    // High-res counter not available, create a GUID
    Result := CreateGUIDAsString;

  end;

function TXPWinNamedKernelObject.GetHandle: THandle;
  begin
  Result  := FHandle;
  end;

function TXPWinNamedKernelObject.GetName: string;
  begin
  Result := FName;
  end;

function TXPWinNamedKernelObject.CustomWait(const Timeout: cardinal): boolean;
  var
  WaitResult: cardinal;

  begin
  WaitResult := Windows.WaitForSingleObject(FHandle, Timeout);

  case WaitResult of
    WAIT_FAILED:
      begin
      Error('TXPWinNamedKernelObject: Windows.WaitForSingleObject failure');
      Result := false;
      end;
    WAIT_TIMEOUT:
      Result := false;
    WAIT_OBJECT_0, WAIT_ABANDONED:
      Result := true;
    else
      Result := false;
    end;

  end;

function TXPWinNamedKernelObject.IsSignaled: boolean;
  begin
  Result := CustomWait(0);
  end;

function TXPWinNamedKernelObject.Wait: boolean;
  begin
  Result := CustomWait(INFINITE);
  end;

function TXPWinNamedKernelObject.WaitFor(const Millisecs: cardinal): boolean;
  begin
  Result := CustomWait(Millisecs);
  end;

///////////////////////////////////////////////////////////////////////////////
///    Global functions
///////////////////////////////////////////////////////////////////////////////

function CreateHandle(const AHandle: THandle): IXPWinHandle;
  begin
  Result := TXPWinHandle.Create(AHandle);
  end;

function CreateGUIDAsString: string;
  var
  AGUID: TGUID;
  AGUIDString: widestring;

  begin
  ActiveX.CoCreateGUID(AGUID);
  System.SetLength(AGUIDString, 39);
  ActiveX.StringFromGUID2(AGUID, PWideChar(AGUIDString), 39);
  Result := string(PWideChar(AGUIDString));
  end;

function Win32ErrorText(const ErrorCode: cardinal): string;
  const
  LangID = 0;
  MessageSource = nil;
  Inserts = nil;

  begin
  System.SetLength(Result, 255);
  Windows.FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, MessageSource, ErrorCode,
    LangID, PAnsiChar(Result), 255, Inserts);
  Result := string(PAnsiChar(Result));
  end;

end.


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线free| ...xxx性欧美| 国产精品美女久久久久aⅴ | 大胆欧美人体老妇| 欧美日韩在线播放三区四区| 久久精品一区二区三区av| 视频在线观看一区| 色悠悠亚洲一区二区| 久久久蜜桃精品| 免费三级欧美电影| 91豆麻精品91久久久久久| 国产日韩综合av| 久久国产精品色| 欧美日韩久久一区二区| 亚洲欧美日韩国产综合| 国产一区二区h| 在线成人av网站| 亚洲一区av在线| 色婷婷综合中文久久一本| 中文字幕电影一区| 国产精品一二三四五| 精品人在线二区三区| 免费黄网站欧美| 欧美一区二区在线免费播放| 亚洲成年人网站在线观看| 不卡的av在线播放| 日本一区二区三区四区| 国产真实精品久久二三区| 欧美一级久久久久久久大片| 丝瓜av网站精品一区二区| 欧美综合天天夜夜久久| 一区二区三区欧美激情| 91理论电影在线观看| 亚洲私人黄色宅男| 色哟哟精品一区| 一区二区三区四区中文字幕| 色香蕉久久蜜桃| 亚洲国产一二三| 欧美日韩免费高清一区色橹橹 | 精品日本一线二线三线不卡| 久久99精品一区二区三区| 精品久久一区二区| 国产一区二区三区高清播放| 国产欧美日本一区二区三区| 成人综合在线网站| 亚洲欧美激情视频在线观看一区二区三区| 不卡一区二区三区四区| 一区二区三区免费网站| 欧美日韩国产影片| 久久精品国产一区二区| 国产色产综合色产在线视频| 99国产精品99久久久久久| 亚洲一二三四区不卡| 欧美一区二区三区在线视频| 国产一区二区三区最好精华液| 中文子幕无线码一区tr| 在线中文字幕一区| 麻豆一区二区99久久久久| 国产精品沙发午睡系列990531| 97se亚洲国产综合自在线不卡| 亚洲综合图片区| 精品福利av导航| yourporn久久国产精品| 性做久久久久久| 国产午夜久久久久| 欧美日韩中文国产| 男男视频亚洲欧美| 亚洲青青青在线视频| 欧美一级日韩一级| 97精品电影院| 久久超碰97中文字幕| 亚洲男帅同性gay1069| 日韩精品一区二区三区中文不卡| 成人av片在线观看| 青椒成人免费视频| 亚洲欧美偷拍卡通变态| 欧美成人在线直播| 在线视频一区二区三| 国产盗摄一区二区三区| 亚洲成人在线网站| 国产精品情趣视频| 日韩午夜激情免费电影| 在线精品国精品国产尤物884a| 极品美女销魂一区二区三区| 亚洲综合精品久久| 国产精品伦理在线| 精品国产乱码久久久久久图片| 一本久久a久久精品亚洲| 国产另类ts人妖一区二区| 一区二区在线观看免费| 欧美激情艳妇裸体舞| 日韩欧美一级特黄在线播放| 91色综合久久久久婷婷| 国产福利一区二区三区视频| 奇米精品一区二区三区在线观看一| 综合久久一区二区三区| 亚洲国产精品激情在线观看| 日韩欧美在线观看一区二区三区| 在线免费av一区| 色综合天天综合网国产成人综合天| 国产一区二区三区四区五区入口 | 在线免费av一区| 99久久综合色| 不卡在线视频中文字幕| 国产成人h网站| 国产九色sp调教91| 激情图片小说一区| 麻豆成人av在线| 蜜臀av性久久久久蜜臀aⅴ| 午夜精品一区二区三区三上悠亚| 亚洲激情综合网| 亚洲精品乱码久久久久久黑人| 中文字幕中文字幕在线一区| 国产欧美视频在线观看| 国产午夜亚洲精品不卡| 久久精品男人的天堂| 久久精品网站免费观看| 久久综合丝袜日本网| 久久亚洲综合色| 国产欧美日本一区视频| 国产精品久久久久久久裸模 | 亚洲国产精品久久一线不卡| 一区二区视频在线看| 亚洲精品ww久久久久久p站| 亚洲一卡二卡三卡四卡五卡| 亚洲一区二区三区三| 婷婷国产v国产偷v亚洲高清| 日韩电影一区二区三区四区| 蜜臀国产一区二区三区在线播放| 麻豆成人久久精品二区三区红 | 亚洲精品一区二区三区香蕉| 欧美xfplay| 欧美国产一区在线| 亚洲色图.com| 视频一区视频二区在线观看| 久久99在线观看| www.一区二区| 欧美日韩mp4| 久久久国产精华| 亚洲免费av在线| 蜜桃视频在线一区| 福利电影一区二区| 在线影院国内精品| 2021久久国产精品不只是精品| 国产欧美日韩亚州综合| 一区二区三区四区在线播放| 日韩av中文字幕一区二区三区| 国产精品亚洲人在线观看| 色综合久久综合网欧美综合网| 7777女厕盗摄久久久| 国产视频不卡一区| 亚洲成a人v欧美综合天堂 | 三级一区在线视频先锋| 国产一区二区三区久久久| 色老汉av一区二区三区| 精品久久一区二区三区| 伊人夜夜躁av伊人久久| 韩国女主播成人在线| 91精品办公室少妇高潮对白| 精品国产伦理网| 亚洲一区在线电影| 国产99久久久久久免费看农村| 欧美视频中文字幕| 欧美韩日一区二区三区四区| 日本欧美久久久久免费播放网| 成人av在线影院| 日韩精品最新网址| 亚洲主播在线观看| 成人午夜在线视频| 欧美成人伊人久久综合网| 亚洲一区二区不卡免费| 成人激情动漫在线观看| 日韩精品一区二区三区视频| 亚洲黄色录像片| 国产成人亚洲精品青草天美| 在线电影欧美成精品| 一区二区在线观看免费视频播放| 国产91在线|亚洲| 日韩欧美国产小视频| 亚洲第一福利视频在线| 成人精品gif动图一区| 日韩精品一区二区三区视频播放| 亚洲一区二区三区自拍| av成人动漫在线观看| 久久久99久久精品欧美| 久久www免费人成看片高清| 欧美人狂配大交3d怪物一区| 亚洲精品日韩一| 不卡一二三区首页| 国产精品女人毛片| 国产一区二区三区香蕉| 久久综合久久鬼色| 久久机这里只有精品| 91精品国产一区二区三区蜜臀| 亚洲一区在线视频| 欧美在线短视频| 亚洲成人av电影| 91精品国产一区二区三区| 视频一区欧美精品| 日韩一区二区免费视频|