在Python中加载dll时,dir函数会显示其方法吗?

2 投票
1 回答
505 浏览
提问于 2025-04-15 18:09

这段代码是用来显示一个dll文件里的方法吗?

from ctypes import *
x = cdll.LoadLibrary("olari.dll")
dir(x)

如果不是,那我们怎么在Python中查看.dll里的方法呢?

1 个回答

2

不,它并不会自动处理。但是,当你调用它的时候,它可以缓存,然后在使用 dir 命令时会显示出来。

你可以看看这个 SO 讨论帖,即使是在 Win32 中,似乎也需要解析 PE 头文件。我觉得 Python 也需要用类似的方法。

更新

我发现了一个用 Python 写的 pefile 读写模块,在这里你可以找到导出的条目。

for entry in pe.DIRECTORY_ENTRY_IMPORT:
  print entry.dll
  for imp in entry.imports:
    print '\t', hex(imp.address), imp.name
Output
comdlg32.dll
        0x10012A0L PageSetupDlgW
        0x10012A4L FindTextW
        0x10012A8L PrintDlgExW
[snip]
SHELL32.dll
        0x1001154L DragFinish
        0x1001158L DragQueryFileW

imp.name 就是你要找的那个名字。你可以在 ctypes 中使用这个名字,比如

>>> ctypes.windll.comdlg32.PageSetupDlgW
<_FuncPtr object at 0x00A97210>
>>> ctypes.windll.comdlg32.FindTextW
<_FuncPtr object at 0x00A97288>
...

撰写回答