Delphi 如何从DLL中检索导出函数的列表
2023-01-03 10:52:04 作者:admin
本文整理自网络,侵删。
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研究之驱动开发篇(六)--利用section与用户模式程序通讯(上)
Delphi取得trichedit的光标当前位置
Delphi linklabel1 用法
Delphi 实现透明窗体
Delphi 同时激活两个窗体
Delphi 设计一个有渐变色的标签
Delphi 获取内网所有ip地址
Delphi sysutils.stringreplace - 替换
Delphi 2009 之 tcategorypanelgroup[3]: color
Delphi 泛型搜索字符串数组
更多相关阅读请进入《Delphi》频道 >>
猜你喜欢
联络方式:
400-123-789
邮箱:xiachao@163.com
Q Q:12345678
微信公众号
微信二维码