在Python中加载dll时,dir函数会显示其方法吗?
这段代码是用来显示一个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>
...