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

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

?? dcdfms.pas

?? SrcDecompiler is about creating a Delphi program decompiler. The program is written for Delphi 4 or
?? PAS
字號:
unit dcDFMs;

interface

uses
  Classes, PEFile, MethodLists, Procs;

type
  { TdcDFM }

  TdcDFM = class(TCollectionItem)
  private
    FFormClass: TClassInfo;
    FResTypeIndex: Integer;
    FResIndex: Integer;
    procedure ClassesLoad(Sender: TmlneMethodList);
    procedure AssignUnits(Sender: TmlneMethodList);
    procedure PublishedMethodsLoad(Sender: TmlneMethodList);
  public
    constructor CreateDFM(ResTypeIndex, ResIndex: Integer; Collection: TCollection);
    destructor Destroy; override;
    procedure SaveToFile(const FileName: string);
    property FormClass: TClassInfo read FFormClass;
    property ResTypeIndex: Integer read FResTypeIndex;
    property ResIndex: Integer read FResIndex;
  end;

  { TdcDFMs }

  TdcDFMs = class(TCollection)
  private
    FPEFile: TPEFile;
    procedure LoadDFMs;
  public
    constructor CreateDFMs(PEFile: TPEFile);
  end;

implementation

uses
  Windows, SysUtils, PEFileClass, dcUnits, TypInfo, TypeInfoUtils, dcDecomps, peExports;
  
{ TdcDFM }

constructor TdcDFM.CreateDFM(ResTypeIndex, ResIndex: Integer; Collection: TCollection);
begin
  inherited Create(Collection);
  FResTypeIndex := ResTypeIndex;
  FResIndex := ResIndex;
  with TPEFileClass(TdcDFMs(Collection).FPEFile) do
  begin
    Classes.OnLoadClasses.Add(ClassesLoad);
    Units.OnAssignUnits.Add(AssignUnits);
    Procs.OnLoadPublishedMethods.Add(PublishedMethodsLoad);
  end;  
end;

destructor TdcDFM.Destroy;
begin
  with TPEFileClass(TdcDFMs(Collection).FPEFile).Classes do
    if OnLoadClasses <> nil then
      OnLoadClasses.Remove(ClassesLoad);
  with TPEFileClass(TdcDFMs(Collection).FPEFile).Units do
    if OnAssignUnits <> nil then
      OnAssignUnits.Remove(Self.AssignUnits);
  inherited Destroy;
end;

procedure TdcDFM.ClassesLoad(Sender: TmlneMethodList);
var
  I: Integer;
begin
  // Load the units
  // Find the form class by compairing the name.
  with TPEFileClass(TdcDFMs(Collection).FPEFile) do
  begin
    for I := 0 to Classes.Count -1 do
      if AnsiCompareText(Classes[I].AClass.ClassName,
             Resources[FResTypeIndex].Entries[FResIndex].Name) = 0 then
        FFormClass := Classes[I];
  end;
  if FormClass <> nil then
    // The form must be in the interface section
    FFormClass.IntfImpl := iiInterface;
  // Call the next event handler.
  Sender.CallNext(ClassesLoad);
end;

procedure TdcDFM.AssignUnits(Sender: TmlneMethodList);
begin
  if FormClass <> nil then
    TUnit(FFormClass.AUnit).DFM := Self;
  // Call the next event handler.
  Sender.CallNext(AssignUnits);
end;

procedure TdcDFM.SaveToFile(const FileName: string);
var
  FileStream: TFileStream;
const
  Header1: PChar = #$FF#$0A#$00;
  Header2: PChar = #$00#$30#$10;
begin
  FileStream := TFileStream.Create(FileName, fmCreate or fmShareDenyWrite);
  try
    with TPEFileClass(TdcDFMs(Collection).FPEFile).Resources[FResTypeIndex].Entries[FResIndex] do
    begin
      FileStream.Write(Header1^, 3);
      FileStream.Write(PChar(string(Name))^, Length(Name));
      FileStream.Write(Header2^, 3);
      FileStream.Write(LongInt(Entries[0].DataSize), SizeOf(LongInt));
      FileStream.Write(Entries[0].Data^, Entries[0].DataSize);
    end;
  finally
    FileStream.Free;
  end;
end;

procedure TdcDFM.PublishedMethodsLoad(Sender: TmlneMethodList);

  procedure AnaObjectBinary(Input: TStream);
  var
    SaveSeparator: Char;
    Reader: TReader;

    procedure ConvertObject;
    var
      AClassInfo: TClassInfo;

      procedure ConvertValue; forward;

      procedure ConvertHeader;
      var
        AClassName, ObjectName: string;
        Flags: TFilerFlags;
        Position: Integer;
        I: Integer;
      resourcestring
        SErrorClassNotFound = 'Class %s mentioned in DFM, not found.';
        SErrorClassHasNoTypeInfo = 'Error, class %s mentioned in DFM so must have TypeInfo';
      begin
        Reader.ReadPrefix(Flags, Position);
        AClassName := Reader.ReadStr;
        ObjectName := Reader.ReadStr;
        // Get the class.
        AClassInfo := TPEFileClass(TdcDFMs(Collection).FPEFile).Classes.FindClassByName(AClassName);
        if AClassInfo = nil then
          with TPEFileClass(TdcDFMs(Collection).FPEFile).DecompThread do
            for I := 0 to PEFileClassCount -1 do
            begin
              AClassInfo := TPEFileClass(PEFileClasses[I]).Classes.FindClassByName(AClassName);
              if AClassInfo <> nil then Break;
            end;

        if AClassInfo = nil then
          raise EDecompilerError.CreateFmt(SErrorClassNotFound, [AClassName]);
        if AClassInfo.AClass.ClassInfo = nil then
          raise EDecompilerError.CreateFmt(SErrorClassHasNoTypeInfo, [AClassName]);
      end;

      procedure ConvertBinary;
      const
        BytesPerLine = 32;
      var
        I: Integer;
        Count: Longint;
        Buffer: array[0..BytesPerLine - 1] of Char;
      begin
        Reader.ReadValue;
        Reader.Read(Count, SizeOf(Count));
        while Count > 0 do
        begin
          if Count >= 32 then I := 32 else I := Count;
          Reader.Read(Buffer, I);
          Dec(Count, I);
        end;
      end;

      procedure ConvertProperty; forward;

      procedure ConvertValue;
      const
        LineLength = 64;
      var
        S: string;
      begin
        case Reader.NextValue of
          vaList:
            begin
              Reader.ReadValue;
              while not Reader.EndOfList do
              begin
                ConvertValue;
              end;
              Reader.ReadListEnd;
            end;
          vaInt8, vaInt16, vaInt32:
            Reader.ReadInteger;
          vaExtended:
            Reader.ReadFloat;
          vaSingle:
            Reader.ReadSingle;
          vaCurrency:
            Reader.ReadCurrency;
          vaDate:
            Reader.ReadDate;
          vaWString:
            Reader.ReadWideString;
          vaString, vaLString:
            Reader.ReadString;
          vaIdent, vaFalse, vaTrue, vaNil, vaNull:
            Reader.ReadIdent;
          vaBinary:
            ConvertBinary;
          vaSet:
            begin
              Reader.ReadValue;
              while True do
              begin
                S := Reader.ReadStr;
                if S = '' then Break;
              end;
            end;
          vaCollection:
            begin
              Reader.ReadValue;
              while not Reader.EndOfList do
              begin
                if Reader.NextValue in [vaInt8, vaInt16, vaInt32] then
                  ConvertValue;
                if Reader.ReadValue <> vaList then
                  raise EDecompilerError.Create('Error reading the DFM property');
                while not Reader.EndOfList do ConvertProperty;
                Reader.ReadListEnd;
              end;
              Reader.ReadListEnd;
            end;
{$IFDEF VER130}
          vaInt64:
            Reader.ReadInt64;
{$ENDIF VER130}
        end;
      end;

      procedure ConvertProperty;
      var
        PropName: string;
        PropInfo: PPropInfo;
        S: string;
        Proc: TProc;
      const
        MethodPossProcTypes: array[TMethodKind] of TProcTypes =
             ([ptMethodProcedure], [ptMethodProcedure], [ptConstructor], [ptDestructor],
              [ptClassProcedure], [ptClassProcedure], [], []);
      begin
        PropName := Reader.ReadStr;
        if Pos('.', PropName) = 0 then
        begin
          PropInfo := GetPropInfo(AClassInfo.AClass.ClassInfo, PropName);
          if (PropInfo <> nil) and (PropInfo.PropType^.Kind = tkMethod) then
          begin
            // It's a method property, so read the procname and assign the
            // proptype to the proc.
            if (Reader.NextValue <> vaIdent) then
              raise EDecompilerError.Create('Next value should be a string');
            S := Reader.ReadIdent;
            Proc := FormClass.FindProc(S);
            if Proc = nil then
              raise EDecompilerError.CreateFmt('Proc referenced in DFM not found %s', [S]);
            Proc.PossProcTypes :=
                MethodPossProcTypes[GetTypeData(PropInfo.PropType^).MethodKind];
            Proc.Parameters.Parameters := GetMethodTypeParameters(PropInfo.PropType^);
            Proc.Parameters.FuncResult := GetMethodTypeResult(PropInfo.PropType^);
            Exit;
          end;
        end;
        ConvertValue;
      end;

    begin
      ConvertHeader;
      while not Reader.EndOfList do
        ConvertProperty;
      Reader.ReadListEnd;
      while not Reader.EndOfList do ConvertObject;
      Reader.ReadListEnd;
    end;

  begin
    Reader := TReader.Create(Input, 4096);
    SaveSeparator := DecimalSeparator;
    DecimalSeparator := '.';
    try
      Reader.ReadSignature;
      ConvertObject;
    finally
      DecimalSeparator := SaveSeparator;
      Reader.Free;
    end;
  end;

var
  Stream: TMemoryStream;
begin
  if FormClass = nil then
    Exit;
  // Analyze the DFM for methods.
  Stream := TMemoryStream.Create;
  try
    with TdcDFMs(Collection).FPEFile.Resources[FResTypeIndex].Entries[FResIndex].Entries[0] do
      Stream.WriteBuffer(Data^, DataSize);
    Stream.Position := 0;
    AnaObjectBinary(Stream);
  finally
    Stream.Free;
  end;
  // Call the next event handler
  Sender.CallNext(PublishedMethodsLoad);
end;

{ TdcDFMs }

constructor TdcDFMs.CreateDFMs(PEFile: TPEFile);
begin
  inherited Create(TdcDFM);
  FPEFile := PEFile;
  LoadDFMs;
end;

procedure TdcDFMs.LoadDFMs;
var
  I, J: Integer;
const
  FilerSignature: array[1..4] of Char = 'TPF0';
begin        
  // Search for RCDATA resources starting with TPF0 (they are dfms).
  with FPEFile do
    for I := 0 to High(Resources) do
      if (Resources[I].NameOrID = niID) and
         (Resources[I].ID = Integer(RT_RCDATA)) then
        for J := 0 to High(Resources[I].Entries) do
        begin
          if (Length(Resources[I].Entries[J].Entries) >= 1) and
             (Resources[I].Entries[J].Entries[0].DataSize > 4) and
             (PInteger(Resources[I].Entries[J].Entries[0].Data)^ = Integer(FilerSignature)) then
            TdcDFM.CreateDFM(I, J, Self);
        end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久福利| 国产风韵犹存在线视精品| 九九九久久久精品| 91视频国产观看| 精品99999| 午夜激情久久久| 91免费版pro下载短视频| 国产日韩欧美精品电影三级在线| 亚洲国产欧美一区二区三区丁香婷| 国产91精品在线观看| 欧美一区二区三区视频| 亚洲一区二区三区免费视频| 成人高清免费观看| 精品国产a毛片| 麻豆精品一区二区| 91.麻豆视频| 亚洲综合色丁香婷婷六月图片| 波多野结衣一区二区三区| 精品剧情在线观看| 日韩av在线播放中文字幕| 在线观看av一区| 亚洲码国产岛国毛片在线| 成人免费av资源| 久久久不卡网国产精品二区| 极品销魂美女一区二区三区| 欧美一区二区啪啪| 日韩av二区在线播放| 678五月天丁香亚洲综合网| 亚洲午夜三级在线| 91高清在线观看| 一区二区三国产精华液| 在线中文字幕一区二区| 亚洲另类中文字| 色综合激情五月| 夜夜夜精品看看| 欧美日韩一区二区三区四区五区| 亚洲一区二区三区激情| 欧美剧在线免费观看网站| 日韩成人dvd| 亚洲日本va在线观看| 一区二区在线观看免费| 色呦呦网站一区| 亚洲一级在线观看| 69精品人人人人| 精品一区免费av| 国产日韩精品一区二区三区| 成人av在线电影| 亚洲男帅同性gay1069| 在线观看亚洲专区| 亚洲成人av免费| 日韩精品一区二区三区在线观看| 美女一区二区三区| 久久青草欧美一区二区三区| 欧美视频在线一区二区三区 | 成人app软件下载大全免费| 乱一区二区av| 亚洲综合清纯丝袜自拍| 国模大尺度一区二区三区| 粉嫩aⅴ一区二区三区四区| 欧美电影免费提供在线观看| 国产精品视频你懂的| 午夜一区二区三区视频| 不卡电影一区二区三区| 精品国精品国产| 午夜精品久久久久久久99樱桃| 国产一区二区导航在线播放| 制服丝袜中文字幕一区| 亚洲成在人线免费| 欧美视频自拍偷拍| 中文字幕在线观看一区| 国产剧情av麻豆香蕉精品| 日韩免费高清电影| 日产精品久久久久久久性色| 精品视频在线看| 亚洲一区二区成人在线观看| 99热精品一区二区| 国产精品久久久久久久久动漫| 国产.欧美.日韩| 久久美女艺术照精彩视频福利播放| 日本aⅴ精品一区二区三区| 欧美精品一级二级三级| 亚洲国产综合在线| 在线中文字幕一区二区| 亚洲18影院在线观看| 欧美日本国产视频| 美女脱光内衣内裤视频久久影院| 欧美美女视频在线观看| 午夜a成v人精品| 欧美日本一区二区| 日本va欧美va精品发布| 久久综合九色综合欧美亚洲| 国v精品久久久网| 亚洲人亚洲人成电影网站色| 欧美伊人久久大香线蕉综合69| 亚洲成a天堂v人片| 日韩午夜电影av| 欧美一级二级在线观看| 国产在线视频一区二区| 亚洲国产经典视频| 91丝袜国产在线播放| 视频在线观看一区| 久久蜜桃av一区精品变态类天堂 | 久久久久88色偷偷免费| 99久久99久久精品国产片果冻 | 亚洲欧美一区二区在线观看| 欧美三级在线看| 国产一区91精品张津瑜| 最新日韩av在线| 欧美一级黄色片| a4yy欧美一区二区三区| 日韩一区精品视频| 中文字幕久久午夜不卡| 欧美精品tushy高清| 国产成人在线视频免费播放| 亚洲在线视频一区| 久久网这里都是精品| 欧美中文字幕一二三区视频| 国产又粗又猛又爽又黄91精品| 亚洲天堂精品在线观看| 中文字幕日韩一区| 欧美成人一区二区三区在线观看| 91在线视频在线| 国产一区二区三区观看| 亚洲自拍偷拍图区| 国产午夜精品福利| 欧美一级专区免费大片| 91啪亚洲精品| 成人午夜av电影| 激情小说欧美图片| 日产国产欧美视频一区精品| 一区二区三区四区精品在线视频| 久久综合网色—综合色88| 欧美精品乱人伦久久久久久| 91在线观看成人| 成人综合在线观看| 国产伦精一区二区三区| 美洲天堂一区二卡三卡四卡视频| 一区二区三区四区在线播放| 中文字幕制服丝袜成人av| 精品区一区二区| 91精品国产综合久久精品| 欧美午夜精品久久久久久孕妇| 成人午夜在线免费| 国产成人精品www牛牛影视| 裸体一区二区三区| 麻豆成人免费电影| 国产精品人妖ts系列视频| 26uuu欧美| 久久亚洲一级片| 久久精品视频网| 国产亚洲一区二区三区四区| 久久亚洲综合av| 中文天堂在线一区| 欧美激情在线观看视频免费| 中文字幕乱码亚洲精品一区| 久久网这里都是精品| 国产蜜臀97一区二区三区| 国产欧美日韩在线看| 国产精品免费视频一区| 国产精品免费久久| 亚洲美女区一区| 亚洲国产精品一区二区尤物区| 亚洲h精品动漫在线观看| 日韩高清在线观看| 国产做a爰片久久毛片| 高清不卡在线观看| 91麻豆成人久久精品二区三区| 欧美亚洲免费在线一区| 欧美福利视频一区| 久久色.com| 亚洲天堂中文字幕| 亚洲第一久久影院| 久久成人麻豆午夜电影| 成人精品免费看| 欧美综合天天夜夜久久| 日韩欧美一二三区| 国产精品免费久久久久| 亚洲国产精品尤物yw在线观看| 日本成人在线一区| 成人午夜视频在线| 欧美日韩成人综合| 久久亚洲综合av| 亚洲综合在线电影| 精品一区二区日韩| 色噜噜狠狠成人中文综合| 欧美一卡在线观看| 中文字幕一区二区三区四区不卡 | 久久狠狠亚洲综合| 91亚洲资源网| 欧美一级专区免费大片| 国产精品高潮呻吟久久| 日韩av中文字幕一区二区三区| 国产ts人妖一区二区| 欧美女孩性生活视频| 国产日韩影视精品| 全国精品久久少妇| 一本一道综合狠狠老| 久久久蜜臀国产一区二区| 亚洲最新在线观看| 成人动漫一区二区三区|