home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 February / Chip_2000-02_cd.bin / zkuste / Delphi / navody / tt / dllfuncs.txt < prev    next >
Text File  |  1999-11-22  |  1KB  |  51 lines

  1. To get a list of exports from a DLL, pass the DLL name and a TStrings object to ListDLLFunctions() below. Note that this does not show the parameters for each export, which you can only get from the author of the DLL. Code by Dmtiry Streblechenko.
  2. uses ImageHlp;
  3. procedure ListDLLFunctions(DLLName: string; List: TStrings);
  4. // by Dmitry Streblechenko
  5. type
  6. chararr = array[0..$FFFFFF] of char;
  7. var
  8. h: THandle;
  9. i, fc: integer;
  10. st: string;
  11. arr: pointer;
  12. ImageDebugInformation: PImageDebugInformation;
  13. begin
  14. List.Clear;
  15. DLLName := ExpandFileName(DLLName);
  16. if FileExists(DLLName) then
  17. begin
  18. h := CreateFile(PChar(DLLName),
  19. GENERIC_READ,
  20. FILE_SHARE_READ or FILE_SHARE_WRITE,
  21. nil,
  22. OPEN_EXISTING,
  23. FILE_ATTRIBUTE_NORMAL,
  24. 0);
  25. if h <> INVALID_HANDLE_VALUE then
  26. try
  27. ImageDebugInformation := MapDebugInformation(h, PChar(DLLName), nil, 0);
  28. if ImageDebugInformation <> nil then
  29. try
  30. arr := ImageDebugInformation^.ExportedNames;
  31. fc := 0;
  32. for i := 0 to ImageDebugInformation^.ExportedNamesSize-1 do
  33. if chararr(arr^)[i] = #0 then
  34. begin
  35. st := PChar(@chararr(arr^)[fc]);
  36. if length(st)>0 then List.Add(st);
  37. if (i>0) and (chararr(arr^)[i-1]=#0) then Break;
  38. fc := i+1;
  39. end;
  40. finally
  41. UnmapDebugInformation(ImageDebugInformation);
  42. end;
  43. finally
  44. CloseHandle(h);
  45. end;
  46. end;
  47. end;
  48.  
  49.  
  50.  
  51.