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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? objautox.pas

?? 在delphi下實(shí)現(xiàn)類似于java, C#等反射調(diào)用的一個(gè)例子
?? PAS
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
 {*******************************************************}
 {           CodeGear Delphi Runtime Library             }
 {               Delphi Reflection Unit                  }
 {                Work likes Java & C#                   }
 {              Copyright(c) 2008 Rarnu                  }
 {*******************************************************}

unit ObjAutoX;

interface

uses TypInfo;

{$IFDEF VER130}
  Not Support Delphi 5
{$ENDIF}
{$IFDEF VER120}
  Not Support Delphi 4
{$ENDIF}
{$IFDEF VER100}
  Not Support Delphi 3
{$ENDIF}
{$IFDEF VER90}
  Not Support Delphi 2
{$ENDIF}
{$IFDEF VER80}
  Not Support Delphi 1
{$ENDIF}

{$IFDEF VER200}
  {$DEFINE DELPHI2009}
{$ENDIF}

const
  paEAX     = word(0);
  paEDX     = word(1);
  paECX     = word(2);
  paStack   = word(3);
  SHORT_LEN = SizeOf(ShortString) - 1;

type
  TCallingConvention = (ccRegister, ccCdecl, ccPascal, ccStdCall, ccSafeCall);
  TParamFlags        = set of (pfVar, pfConst, pfArray, pfAddress, pfReference, pfOut,
    pfResult);
  PPointer           = ^Pointer;
  PWord              = ^word;
  PMethodInfoHeader  = ^TMethodInfoHeader;

  TMethodInfoHeader = packed record
    Len:  word;
    Addr: Pointer;
    Name: ShortString;
  end;

  PPropertyInfo = PPropInfo;

  PReturnInfo = ^TReturnInfo;

  TReturnInfo = packed record
    Version:           byte; // Must be 1
    CallingConvention: TCallingConvention;
    ReturnType:        ^PTypeInfo;
    ParamSize:         word;
  end;

  PParamInfo = ^TParamInfo;

  TParamInfo = packed record
    Flags:     TParamFlags;
    ParamType: ^PTypeInfo;
    Access:    word;
    Name:      ShortString;
  end;
  TMethodInfoArray = array of PMethodInfoHeader;
  TParamInfoArray  = array of PParamInfo;
  TPropertyArray   = array of PPropertyInfo;

 // 動(dòng)態(tài)調(diào)用方法
 // 參數(shù):
 // Instance: 類實(shí)例
 // MethodHeader: 類內(nèi)方法 $MethodInfo 信息
 // ParamIndexes: 參數(shù)索引
 // Params: 參數(shù)表
 // Return: 被調(diào)用方法的返回值
function ObjectInvoke(Instance: TObject; MethodHeader: PMethodInfoHeader;
  const ParamIndexes: array of integer; const Params: array of variant): variant;

 // 獲取方法 $MethodInfo 信息
 // 參數(shù):
 // Instance: 類實(shí)例
 // MethodName: 方法名
 // Return: 類內(nèi)方法 $MethodInfo 信息
function GetMethodInfo(Instance: TObject;
  const MethodName: ShortString): PMethodInfoHeader;

type
  IMethodHandler = interface
    ['{4E61C8CD-16CC-4830-B1E4-84F86FBC0D23}']
    function Execute(const Args: array of variant): variant;
    function InstanceToVariant(Instance: TObject): variant;
  end;

  PParameters = ^TParameters;

  TParameters = packed record
    Registers: array[paEDX..paECX] of cardinal;
    Stack:     array[0..1023] of byte;
  end;
  TDynamicInvokeEvent = procedure(Params: PParameters; StackSize: integer) of object;

 // 建立代碼委托智能指針(重載)
 // 參數(shù):
 // MethodHandler: 方法句柄接口
 // TypeData: 方法 $TypeData 信息
 // Return: 方法指針
function CreateMethodPointer(const MethodHandler: IMethodHandler;
  TypeData: PTypeData): TMethod; overload;

 // 建立代碼委托智能指針(重載)
 // 參數(shù):
 // ADynamicInvokeEvent: 方法調(diào)用事件函數(shù)對(duì)象
 // TypeData: 方法 $TypeData 信息
 // Return: 方法指針
function CreateMethodPointer(const ADynamicInvokeEvent: TDynamicInvokeEvent;
  TypeData: PTypeData): TMethod; overload;

 // 釋放代碼委托智能指針
 // 參數(shù):
 // Method: 方法指針
procedure ReleaseMethodPointer(MethodPointer: TMethod);

 // 獲取方法列表
 // 參數(shù):
 // ClassType: 類TypeInfo信息
 // Return: 類內(nèi)方法 $MethodInfo 列表
function GetMethods(ClassType: TClass): TMethodInfoArray;
function GetInvokeInstance(MethodPointer: TMethod): TObject;

 // 獲取參數(shù)列表
 // 參數(shù):
 // Instance: 類實(shí)例
 // MethodName: 方法名
 // Return: 類內(nèi)方法參數(shù) $MethodInfo 列表
function GetParams(Instance: TObject; MethodName: string): TParamInfoArray;

 // 獲取返回值信息
 // 參數(shù):
 // Instance: 類實(shí)例
 // MethodName: 方法名
 // Return: 類內(nèi)方法返回值 $MethodInfo 信息
function GetReturnInfo(Instance: TObject; MethodName: string): PReturnInfo;

// 獲取屬性列表
// 參數(shù):
// ClassType: 類TypeInfo信息
// Return: 類內(nèi)公開屬性 $M 列表
function GetProperties(ClassType: TClass): TPropertyArray;

implementation

uses SysUtils, Variants, VarUtils, RTLConsts;

function GetProperties(ClassType: TClass): TPropertyArray;
var
  ClassTypeInfo: PTypeInfo;
  ClassDataInfo: PTypeData;
  Pplst: PPropList;
  i: integer;
begin
  ClassTypeInfo := ClassType.ClassInfo;
  ClassDataInfo := GetTypeData(ClassTypeInfo);
  if ClassDataInfo.PropCount <> 0 then
  begin
    GetMem(Pplst, sizeof(PPropInfo) * ClassDataInfo.PropCount);
    try
      GetPropInfos(ClassTypeInfo, Pplst);
      SetLength(Result, ClassDataInfo.PropCount);
      for i := 0 to ClassDataInfo.PropCount - 1 do
      begin
        Result[i] := Pplst[i];
      end;
    finally
      FreeMem(Pplst, sizeof(PPropInfo) * ClassDataInfo.PropCount);
    end;
  end;
end;

function GetTypeSize(TypeInfo: PTypeInfo): integer;
var
  TypeData: PTypeData;
begin
  case TypeInfo^.Kind of
    tkInteger, tkEnumeration:
    begin
      TypeData := GetTypeData(TypeInfo);
      if TypeData^.MinValue >= 0 then
        if cardinal(TypeData^.MaxValue) > $FFFF then
          Result := 4
        else if TypeData^.MaxValue > $FF then
          Result := 2
        else
          Result := 1
      else
      if (TypeData^.MaxValue > $7FFF) or (TypeData^.MinValue < -$7FFF - 1) then
        Result := 4
      else if (TypeData^.MaxValue > $7F) or (TypeData^.MinValue < -$7F - 1) then
        Result := 2
      else
        Result := 1;
    end;
    tkFloat:
    begin
      TypeData := GetTypeData(TypeInfo);
      case TypeData^.FloatType of
        ftSingle: Result := 4;
        ftComp, ftCurr, ftDouble: Result := 8;
        else
          Result := -1;
      end;
    end;
    tkString, tkLString,
{$IFDEF DELPHI2009}
    tkUString,
{$ENDIF}
    tkWString, tkInterface, tkClass:
      Result := 4;
    tkMethod, tkInt64:
      Result := 8;
    tkVariant:
      Result := 16;
    else
      Assert(False);
      Result := -1;
  end;
end;

type
  TConvertKind = (ckNone, ckConvert, ckError);

function ConvertKindOf(Source, Dest: TVarType): TConvertKind;
const
  none = ckNone;
  cvt  = ckConvert;
  err  = ckError;
  Codes: array[varEmpty..
{$IFDEF DELPHI2009}
    varUInt64
{$ELSE}varInt64{$ENDIF}
    , varEmpty..
{$IFDEF DELPHI2009}
    varUInt64
{$ELSE}varInt64{$ENDIF}
    ] of TConvertKind =
    ({v From} {To >}{vt_empty} {vt_null} {vt_i2} {vt_i4} {vt_r4}
    {vt_r8}{vt_cy}{vt_date}{vt_bstr}{vt_dispatch}{vt_error}{vt_bool}
    {vt_variant}{vt_unknown}{vt_decimal}{0x0f }{vt_i1}{vt_ui1}
    {vt_ui2}{vt_ui4}{vt_i8}{vt_ui8}
    {vt_empty}      (none, err, err, err, err, err,
    err, err, err, err, err, err, none,
    err, err, err, err, err, err, err, err
{$IFDEF DELPHI2009}
    , err
{$ENDIF}
    ),
    {vt_null}       (err, none, err, err, err, err,
    err, err, err, err, err, err, none,
    err, err, err, err, err, err, err, err
{$IFDEF DELPHI2009}
    , err
{$ENDIF}
    ),
    {vt_i2}         (err, err, none, cvt, cvt, cvt,
    cvt, cvt, cvt, err, err, cvt, none,
    err, cvt, err, cvt, cvt, cvt, cvt, cvt
{$IFDEF DELPHI2009}
    , cvt
{$ENDIF}
    ),
    {vt_i4}         (err, err, none, none, cvt, cvt,
    cvt, cvt, cvt, err, err, cvt, none,
    err, cvt, err, cvt, cvt, cvt, cvt, cvt
{$IFDEF DELPHI2009}
    , cvt
{$ENDIF}
    ),
    {vt_r4}         (err, err, cvt, cvt, none, cvt,
    cvt, cvt, cvt, err, err, cvt, none,
    err, cvt, err, cvt, cvt, cvt, cvt, cvt
{$IFDEF DELPHI2009}
    , cvt
{$ENDIF}
    ),
    {vt_r8}         (err, err, cvt, cvt, cvt, none,
    none, none, cvt, err, err, cvt, none,
    err, cvt, err, cvt, cvt, cvt, cvt, cvt
{$IFDEF DELPHI2009}
    , cvt
{$ENDIF}
    ),
    {vt_cy}         (err, err, cvt, cvt, cvt, none,
    none, none, cvt, err, err, cvt, none,
    err, cvt, err, cvt, cvt, cvt, cvt, cvt
{$IFDEF DELPHI2009}
    , cvt
{$ENDIF}
    ),
    {vt_date}       (err, err, cvt, cvt, cvt, none,
    none, none, cvt, err, err, cvt, none,
    err, cvt, err, cvt, cvt, cvt, cvt, cvt
{$IFDEF DELPHI2009}
    , cvt
{$ENDIF}
    ),
    {vt_bstr}       (err, err, cvt, cvt, cvt, cvt,
    cvt, cvt, none, err, err, cvt, none,
    err, cvt, err, cvt, cvt, cvt, cvt, cvt
{$IFDEF DELPHI2009}
    , cvt
{$ENDIF}
    ),
    {vt_dispatch}   (err, err, err, err, err, err,
    err, err, err, none, err, err, none,
    none, err, err, err, err, err, err, err
{$IFDEF DELPHI2009}
    , err
{$ENDIF}
    ),
    {vt_error}      (err, err, err, err, err, err,
    err, err, err, err, none, err, none,
    err, err, err, err, err, err, err, err
{$IFDEF DELPHI2009}
    , err
{$ENDIF}
    ),
    {vt_bool}       (err, err, cvt, cvt, err, err,
    err, err, cvt, err, err, none, none,
    err, cvt, err, cvt, cvt, cvt, cvt, cvt
{$IFDEF DELPHI2009}
    , cvt
{$ENDIF}
    ),
    {vt_variant}    (cvt, cvt, cvt, cvt, cvt, cvt,
    cvt, cvt, cvt, cvt, cvt, cvt, none,
    cvt, cvt, cvt, cvt, cvt, cvt, cvt, cvt
{$IFDEF DELPHI2009}
    , cvt
{$ENDIF}
    ),
    {vt_unknown}    (err, err, err, err, err, err,
    err, err, err, err, err, err, none,
    none, err, err, err, err, err, err, err
{$IFDEF DELPHI2009}
    , err
{$ENDIF}
    ),
    {vt_decimal}    (err, err, cvt, cvt, cvt, cvt,
    cvt, cvt, cvt, err, err, cvt, none,
    err, none, err, cvt, cvt, cvt, cvt, cvt
{$IFDEF DELPHI2009}
    , cvt
{$ENDIF}
    ),
    {0x0f }         (err, err, err, err, err, err,
    err, err, err, err, err, err, none,
    err, err, none, err, err, err, err, err
{$IFDEF DELPHI2009}
    , err
{$ENDIF}
    ),
    {vt_i1}         (err, err, cvt, cvt, cvt, cvt,
    cvt, cvt, cvt, err, err, cvt, none,
    err, cvt, err, none, none, cvt, cvt, cvt
{$IFDEF DELPHI2009}
    , cvt
{$ENDIF}
    ),
    {vt_ui1}        (err, err, cvt, cvt, cvt, cvt,
    cvt, cvt, cvt, err, err, cvt, none,
    err, cvt, err, none, none, cvt, cvt, cvt
{$IFDEF DELPHI2009}
    , cvt
{$ENDIF}
    ),
    {vt_ui2}        (err, err, none, cvt, cvt, cvt,
    cvt, cvt, cvt, err, err, cvt, none,
    err, cvt, err, none, none, none, cvt, cvt
{$IFDEF DELPHI2009}
    , cvt
{$ENDIF}
    ),
    {vt_ui4}        (err, err, none, none, cvt, cvt,
    cvt, cvt, cvt, err, err, cvt, none,
    err, cvt, err, none, none, none, none, cvt
{$IFDEF DELPHI2009}
    , cvt
{$ENDIF}
    ),
    {vt_i8}         (err, err, none, none, cvt, cvt,
    cvt, cvt, cvt, err, err, cvt, none,
    err, cvt, err, none, none, none, none, none
{$IFDEF DELPHI2009}
    , none
{$ENDIF}
    )
{$IFDEF DELPHI2009}
    {vt_ui8}, (err, err, none, none, cvt, cvt,
    cvt, cvt, cvt, err, err, cvt, none,
    err, cvt, err, none, none, none,
    none, none, none)
{$ENDIF}
    );
begin
  if Source = Dest then
    Result := none
  else
  // < Low(Codes) always evaluates to false since it is zero
  if {(Source < Low(Codes)) or} (Source > High(Codes)) or
    {(Dest < Low(Codes)) or} (Dest > High(Codes)) then

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本人妖一区二区| 欧美一区二区三区日韩视频| 亚洲国产精品精华液2区45| 经典三级在线一区| 国产欧美精品国产国产专区| 国产 日韩 欧美大片| 国产嫩草影院久久久久| 成人免费视频一区二区| 亚洲天堂成人在线观看| 欧美在线免费视屏| 日本午夜精品一区二区三区电影| 欧美一级日韩免费不卡| 国产麻豆精品视频| 自拍偷自拍亚洲精品播放| 在线欧美日韩国产| 日韩1区2区3区| 国产色91在线| 在线免费观看视频一区| 日韩**一区毛片| 国产欧美1区2区3区| 欧美自拍丝袜亚洲| 精品写真视频在线观看| 国产精品国产三级国产普通话蜜臀| 91麻豆免费视频| 日韩精品色哟哟| 国产偷国产偷精品高清尤物| 色94色欧美sute亚洲13| 人人精品人人爱| 国产精品三级在线观看| 7777精品伊人久久久大香线蕉完整版 | 99精品视频在线播放观看| 亚洲图片欧美综合| 国产亚洲综合色| 欧美视频在线不卡| 国产成人在线观看免费网站| 亚洲动漫第一页| 国产精品无遮挡| 欧美一区日韩一区| 91免费在线看| 国产精品888| 视频一区欧美精品| 中文字幕制服丝袜一区二区三区| 欧美日韩一区国产| 成人黄色一级视频| 激情小说欧美图片| 性感美女久久精品| 成人欧美一区二区三区白人 | 色综合天天做天天爱| 久久精品国产成人一区二区三区| 亚洲欧洲日本在线| 精品久久久网站| 欧美三级在线看| 成人黄色电影在线| 国产一区二区三区在线观看免费| 亚洲第一激情av| 亚洲欧美视频一区| 国产精品视频线看| 久久色在线视频| 这里只有精品电影| 欧美视频一区二区三区在线观看| 成人av在线一区二区三区| 欧美a级理论片| 亚洲sss视频在线视频| 亚洲视频一二三区| 亚洲欧洲三级电影| 国产精品青草综合久久久久99| 日韩精品一区二区三区swag| 91精品国产福利在线观看| 欧美视频在线不卡| 欧美综合天天夜夜久久| 色综合夜色一区| 91在线一区二区三区| 成人av资源站| 91亚洲午夜精品久久久久久| 不卡一区中文字幕| 99久久er热在这里只有精品15| 国产成人精品亚洲777人妖| 国产毛片一区二区| 国产精品香蕉一区二区三区| 国产一区二区精品久久91| 激情深爱一区二区| 国产美女视频一区| 国产jizzjizz一区二区| 成人黄色a**站在线观看| av激情成人网| 91精品1区2区| 欧美日韩国产成人在线免费| 欧美日韩黄色影视| 日韩视频一区在线观看| 精品国产3级a| 日本一区二区三区电影| 亚洲欧美综合色| 亚洲国产视频在线| 日韩av一区二区三区四区| 精品无码三级在线观看视频| 国产精品77777| 91麻豆精品在线观看| 精品视频免费看| 精品欧美一区二区久久| 欧美激情一区在线观看| 伊人开心综合网| 日韩精品久久久久久| 激情久久久久久久久久久久久久久久| 国产一区三区三区| 色婷婷综合久久久| 日韩三级在线免费观看| 久久九九国产精品| 亚洲综合小说图片| 精一区二区三区| 色香蕉久久蜜桃| 欧美一级黄色片| 国产精品天天看| 视频一区二区不卡| 懂色av噜噜一区二区三区av| 色欧美片视频在线观看在线视频| 777久久久精品| 国产精品色在线| 日韩高清欧美激情| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 欧美日韩免费在线视频| 精品国产一区二区三区忘忧草| 日韩一区日韩二区| 精品一区二区三区免费| 91丨九色丨国产丨porny| 欧美xxx久久| 亚洲一区二区三区四区在线| 国产毛片精品一区| 欧美三级三级三级| 中文字幕第一区二区| 日韩成人精品视频| 91在线视频18| 久久久精品黄色| 日韩av网站免费在线| 91丨九色porny丨蝌蚪| 久久精子c满五个校花| 日本免费在线视频不卡一不卡二| 不卡的av在线| 久久久久久亚洲综合| 日韩电影网1区2区| 在线观看日韩电影| 亚洲欧洲一区二区在线播放| 激情欧美一区二区三区在线观看| 欧美丝袜第三区| 亚洲精品中文字幕在线观看| 丁香网亚洲国际| 2023国产精品| 捆绑紧缚一区二区三区视频| 精品视频999| 亚洲免费在线播放| 成人禁用看黄a在线| 亚洲精品在线三区| 另类调教123区| 91.com在线观看| 中文字幕欧美区| 日韩成人dvd| 盗摄精品av一区二区三区| 欧美一区永久视频免费观看| 在线观看成人小视频| ww久久中文字幕| 久久国内精品视频| 日韩一卡二卡三卡四卡| 国产一区二区三区在线看麻豆| 91精品国产一区二区| 激情综合色综合久久综合| 国产精品色哟哟| 欧美日韩精品系列| 国产一区二区三区在线观看免费| 国产精品乱码妇女bbbb| 在线观看免费视频综合| 蜜桃视频一区二区| 国产精品欧美久久久久无广告| 色综合中文字幕国产 | 亚洲成人综合视频| 亚洲精品一区二区三区影院| www.久久久久久久久| 亚洲一区免费观看| 精品国产91乱码一区二区三区| 91一区二区在线| 日韩国产欧美一区二区三区| 国产人妖乱国产精品人妖| 日本精品一区二区三区四区的功能| 天天色综合天天| 国产精品免费视频观看| 91精品国产综合久久香蕉的特点| 国产99精品在线观看| 视频一区欧美精品| 国产精品国产三级国产普通话三级 | 国产中文一区二区三区| 亚洲欧美电影院| 久久午夜国产精品| 欧美三级日韩在线| gogo大胆日本视频一区| 精品在线播放免费| 亚洲国产精品影院| 久久久久久久综合日本| 欧美日韩国产在线观看| www.激情成人| 狠狠色综合播放一区二区| 亚洲午夜电影在线观看| 中文乱码免费一区二区|