2003. december 30., kedd
Retrieve list of exported functions from a DLL
Problem/Question/Abstract:
Retrieve list of exported functions from a DLL
Answer:
To retrieve the list of exported functions from a DLL, pass the DLL name and a TStrings object to the function ListDLLFunctions() shown below.
This does not show the parameters for each export, which you can only get from the author of the DLL.
program Project1;
uses
Forms,
Classes,
SysUtils,
Dialogs,
ImageHlp, // routines to access debug information
Windows;
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;
// the following is an example how to use the procedure
var
List: TStrings;
I: integer;
S: string;
begin
List := TStringList.Create;
ListDLLFunctions('c:\winnt\system32\mfc42.dll', List);
S := 'List of functions';
for I := 0 to List.Count - 1 do
S := S + #13#10 + List[I];
ShowMessage(S);
List.Free
end.
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése