程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 取得某一dll所有輸出函數名

取得某一dll所有輸出函數名

編輯:Delphi

  取得某一dll所有輸出函數名
  在uses裡加上ImageHlp

  procedure ListDLLFunctions(DLLName: String; List: TStrings);
  type
    chararr = array [0..$FFFFFF] of Char;
    var
    H: THandle;
    I,
    fc: integer;
    st: string;
    arr: Pointer;
    ImageDebugInformation: PImageDebugInformation;
  begin
    List.Clear;
    DLLName := ExpandFileName(DLLName);
    if FileExists(DLLName) then
    begin
      H := CreateFile(PChar(DLLName), GENERIC_READ, FILE_SHARE_READ or
        FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
      if H<>INVALID_HANDLE_VALUE then
        try
          ImageDebugInformation := MapDebugInformation(H, PChar(DLLName), nil, 0);
          if ImageDebugInformation<>nil then
            try
              arr := ImageDebugInformation^.ExportedNames;
              fc := 0;
              for I := 0 to ImageDebugInformation^.ExportedNamesSize - 1 do
                if chararr(arr^)[I]=#0 then
                begin
                  st := PChar(@chararr(arr^)[fc]);
                  if Length(st)>0 then
                    List.Add(st);
                  if (I>0) and (chararr(arr^)[I-1]=#0) then
                    Break;
                  fc := I + 1
                end
            finally
              UnmapDebugInformation(ImageDebugInformation)
            end
        finally
          CloseHandle(H)
        end
    end
  end;

  procedure TForm1.Button1Click(Sender: TObject);
  var
    List: TStrings;
    I: integer;
    S: String;

  begin
    List := TStringList.Create;

    ListDLLFunctions('c:WindowssystemAbcsda.dll', List);
    showmessage(inttostr(list.count));
    S := 'List of functions';
    for I := 0 to List.Count - 1 do
      S := S + #13#10 + List[I];
    ShowMessage(S);

    List.Free
  end;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved