delphi 如何从DLL中检索导出函数的列表  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 如何从DLL中检索导出函数的列表


 program Project1;
 
 uses
   Forms,
   Classes,
   SysUtils,
   Dialogs,
   ImageHlp, // routines to access debug information
   Windows;
 
 // by Dmitry Streblechenko
 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.


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.11868786811829 seconds