亚洲欧美第一页_禁久久精品乱码_粉嫩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)公開(kā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一区二区三区免费野_久草精品视频
日韩欧美色电影| 亚洲女同女同女同女同女同69| 天天av天天翘天天综合网色鬼国产| 777久久久精品| 91精彩视频在线| 色偷偷一区二区三区| 国产成人在线视频播放| 精品一区二区免费视频| 麻豆国产精品视频| 免费日韩伦理电影| 激情深爱一区二区| 国产成+人+日韩+欧美+亚洲| 国产乱码精品1区2区3区| 韩国理伦片一区二区三区在线播放| 亚洲少妇屁股交4| 一区二区三区四区视频精品免费| 26uuu国产一区二区三区| 国产亚洲精品免费| 中文字幕在线一区二区三区| 亚洲麻豆国产自偷在线| 亚洲一区二区三区视频在线| 丝袜美腿高跟呻吟高潮一区| 裸体在线国模精品偷拍| 国产精品一区二区久久精品爱涩 | 国产一区二区三区香蕉| 国产精品综合二区| 亚洲资源在线观看| 国产精品久久久久久久久晋中| 高清国产一区二区| 青青草97国产精品免费观看无弹窗版| 欧美精品一区二区三区蜜桃 | 国产精品久久久久影视| 日韩一区二区在线看| 久久蜜臀精品av| 亚洲人亚洲人成电影网站色| 亚洲电影第三页| 韩国精品免费视频| 91极品视觉盛宴| 欧美刺激午夜性久久久久久久| 欧美日韩精品一区视频| 欧洲精品在线观看| 91色porny在线视频| 制服丝袜成人动漫| 国产精品网站导航| 国产欧美一区二区三区网站| 日韩精品一区二区三区在线播放 | 亚洲成人午夜电影| 国产一区二区三区在线观看精品 | 亚洲h在线观看| 亚洲成人先锋电影| 大尺度一区二区| 在线播放中文一区| 中文字幕综合网| 久久国产精品露脸对白| 欧美中文字幕一二三区视频| 91丨国产丨九色丨pron| 欧美精品一区二区三区在线播放| 日韩视频一区二区在线观看| 亚洲欧美一区二区三区国产精品| |精品福利一区二区三区| 久久99精品久久久久久久久久久久| 久久电影网站中文字幕| 欧美日韩在线一区二区| 欧美一级高清大全免费观看| 日韩欧美123| 香蕉久久一区二区不卡无毒影院 | 欧美视频一区在线| 国产精品免费视频网站| 久久99国产精品久久99果冻传媒| 黑人巨大精品欧美黑白配亚洲| 国产成人精品免费| 精品国产自在久精品国产| 国产亚洲精品精华液| 久久99九九99精品| 日韩精品一区二区三区swag| 天天av天天翘天天综合网| 精品一区二区在线观看| 这里只有精品99re| 午夜伦欧美伦电影理论片| 欧美午夜精品电影| 夜夜嗨av一区二区三区网页 | 7777精品伊人久久久大香线蕉的| 精品日韩一区二区三区 | 久久综合色天天久久综合图片| 久久久www成人免费无遮挡大片| 国产精品动漫网站| 成人av电影在线播放| 国产精品成人在线观看| 成人丝袜高跟foot| 一区在线中文字幕| 91网站最新地址| 日韩欧美中文字幕制服| 美日韩一区二区| 色婷婷综合久色| 亚洲国产欧美日韩另类综合 | 欧美日韩国产精品成人| 午夜精品久久久久久久久| 国产乱码精品一区二区三区av| 91老师国产黑色丝袜在线| 亚洲同性同志一二三专区| 久久国产精品72免费观看| 色欧美88888久久久久久影院| 欧美精品一区二区三| 国产.欧美.日韩| 中文字幕一区三区| 色呦呦一区二区三区| 五月婷婷激情综合| 日韩视频免费观看高清完整版| 亚洲精品亚洲人成人网| 国产aⅴ综合色| 亚洲毛片av在线| 欧美一区二区三区在线看| 亚洲综合色网站| 精品国产污污免费网站入口| 成人在线综合网站| 午夜精品久久久久久久久久久 | 欧美日韩一二区| 免费久久精品视频| 日本一区二区电影| 欧美视频在线播放| 国产成人午夜精品影院观看视频| 日韩欧美一区二区在线视频| 岛国av在线一区| 国产欧美一区二区精品秋霞影院 | 日韩亚洲欧美高清| 成人性生交大片免费看在线播放| 精品久久久久久久久久久久久久久久久| 亚洲午夜一区二区三区| 亚洲精品在线电影| 一本色道久久综合亚洲aⅴ蜜桃| ●精品国产综合乱码久久久久| 99热这里都是精品| 久久99热国产| 亚洲无人区一区| 国产精品欧美一区二区三区| 欧美日韩国产免费一区二区| 丁香婷婷深情五月亚洲| 婷婷综合五月天| 最新国产成人在线观看| 欧美zozozo| 欧美日韩精品欧美日韩精品| 成人中文字幕电影| 国产一区二区三区免费在线观看| 精品成人佐山爱一区二区| 欧美日韩精品电影| 91丨九色丨国产丨porny| 国产伦精品一区二区三区在线观看| 国产欧美精品一区aⅴ影院| 制服丝袜亚洲播放| 欧美年轻男男videosbes| 91色在线porny| 99久久精品国产观看| 国产乱码一区二区三区| 蜜臀av性久久久久av蜜臀妖精| 2017欧美狠狠色| 99久久国产综合色|国产精品| 亚洲综合久久久久| 一区二区三区四区乱视频| 777久久久精品| 7777精品伊人久久久大香线蕉的| 国产麻豆精品久久一二三| 成人免费毛片嘿嘿连载视频| 一区二区三区中文免费| 欧美一区二区三区在线观看 | 日韩精品视频网| 亚洲大片在线观看| 亚洲与欧洲av电影| 亚洲成人福利片| 亚洲国产精品一区二区尤物区| 欧美电影免费观看高清完整版在| 国产91精品露脸国语对白| 国产精品一区三区| 国产乱妇无码大片在线观看| 国产成人在线观看| 成人高清av在线| 99久久精品国产一区| 91香蕉视频黄| 欧美日韩精品一区二区天天拍小说 | 不卡一区二区三区四区| 成人h动漫精品一区二区| 99精品在线免费| 欧美色欧美亚洲另类二区| 欧美日韩日本视频| 日韩欧美卡一卡二| 久久综合色婷婷| 国产精品青草综合久久久久99| 欧美一级二级在线观看| 欧美精品一区二区三区四区 | 成人午夜电影网站| 久久国产欧美日韩精品| 国产成人在线影院| 在线影视一区二区三区| 717成人午夜免费福利电影| 欧美一区二区国产| 欧美久久婷婷综合色| 亚洲精品一区二区三区四区高清| 欧美老肥妇做.爰bbww视频| 欧美一级高清片在线观看| 日本一区二区成人| 亚州成人在线电影|