登陆
浏览模式: 标准 | 列表 Tag: 获取dll函数

读取dll所有输出函数名

取得某一dll所有输出函数名
在uses里加上ImageHlp

Delphi代码
  1. procedure ListDLLFunctions(DLLName: String; List: TStrings);   
  2. type  
  3. chararr = array [0..$FFFFFFof Char;   
  4. var  
  5. H: THandle;   
  6. I,   
  7. fc: integer;   
  8. st: string;   
  9. arr: Pointer;   
  10. ImageDebugInformation: PImageDebugInformation;   
  11. begin  
  12. List.Clear;   
  13. DLLName := ExpandFileName(DLLName);   
  14. if FileExists(DLLName) then  
  15. begin  
  16. H := CreateFile(PChar(DLLName), GENERIC_READ, FILE_SHARE_READ or  
  17. FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);   
  18. if H<>INVALID_HANDLE_VALUE then  
  19. try  
  20. ImageDebugInformation := MapDebugInformation(H, PChar(DLLName), nil0);   
  21. if ImageDebugInformation<>nil then  
  22. try  
  23. arr := ImageDebugInformation^.ExportedNames;   
  24. fc := 0;   
  25. for I := 0 to ImageDebugInformation^.ExportedNamesSize - 1 do  
  26. if chararr(arr^)[I]=#0 then  
  27. begin  
  28. st := PChar(@chararr(arr^)[fc]);   
  29. if Length(st)>0 then  
  30. List.Add(st);   
  31. if (I>0and (chararr(arr^)[I-1]=#0then  
  32. Break;   
  33. fc := I + 1  
  34. end  
  35. finally  
  36. UnmapDebugInformation(ImageDebugInformation)   
  37. end  
  38. finally  
  39. CloseHandle(H)   
  40. end  
  41. end  
  42. end;   
  43.   
  44. procedure TForm1.Button1Click(Sender: TObject);   
  45. var  
  46. List: TStrings;   
  47. I: integer;   
  48. S: String;   
  49.   
  50. begin  
  51. List := TStringList.Create;   
  52.   
  53. ListDLLFunctions('c:windowssystemAbcsda.dll', List);   
  54. showmessage(inttostr(list.count));   
  55. S := 'List of functions';   
  56. for I := 0 to List.Count - 1 do  
  57. S := S + #13#10 + List[I];   
  58. ShowMessage(S);   
  59.   
  60. List.Free   
  61. end;     

Tags: 读取dll函数, 所有函数, 获取dll函数