Delphi 读取dll所有输出函数名


本文整理自网络,侵删。

 取得某一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;

相关阅读 >>

Delphi 一个绘制虚线的非常规函数(常规方法,打印机上绘制不出虚线)

Delphi xe7实现获取程序是否已管理员模式运行以及运行的windows用户名

Delphi 读取网上的文本文件

Delphi版多开源码,也就是遍历系统内核对象句柄

encryptit.pas

Delphi与进程、窗口句柄、文件属性、程序运行状态

Delphi datasnap 的http 调用返回json

Delphi winapi: shellexecute - 打开外部程序或文件

Delphi 排列桌面图标

Delphi关于邮箱收信的问题

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



打赏

取消

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

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

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

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

评论

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