2

此代码是否显示来自 dll 的方法?

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

如果没有,我们如何才能看到 python 中的 .dll 方法?

4

1 回答 1

2

不,它没有。但是它可以在您调用时缓存,然后会显示出来dir

你可以看看这个SO Thread,即使在 Win32 中,似乎也需要解析 PE Header。我认为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>
...
于 2010-01-18T10:34:12.627 回答