| 
 | 
 
取得某一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;
 
  
  复制代码   //rock 
来源:http://www.examda.com/ncre2/Delphi/zonghe/20090914/081347578.html |   
 
 
 
 |