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.

相关阅读 >>

Delphi 获取百度注册页面验证码图片的源代码

Delphi获取进程的命令行参数

Delphi java设置环境变量小工具

Delphi��image存入读取mysql数据库

Delphi cross socket的库

Delphi的四舍五入函数

Delphi中判断tcp端口是否被占用

Delphi内嵌汇编语言basm精要

Delphi 获取当前鼠标指针位置文本

Delphi之伪造referer下载文件

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...