1

我正在尝试从 Windows dll 创建一堆 python 函数,并希望将文档字符串附加到每个新函数。

我当前的代码:

import ctypes

lib=ctypes.WinDLL('example.dll')

VCS_OpenDevice=lib['VCS_OpenDevice']
VCS_OpenDevice.restype=ctypes.c_double

当我在解释器中运行此脚本并尝试使用该函数时,我收到“无文档字符串”消息。

无法弄清楚在那里添加一些东西。任何帮助表示赞赏。

在此处输入图像描述

4

2 回答 2

4

赋值给函数指针的__doc__属性:ctypes

VCS_OpenDevice.__doc__ = 'My docstring'

__doc__是 Python 对象的 docstring 属性,ctypes对象允许你写入这个属性。

必修的libc演示(我用的是Mac,不是Windows,但原理是一样的):

>>> from ctypes import *
>>> libc = cdll.LoadLibrary("libc.dylib") 
>>> libc.time.__doc__ = 'time -- get time of day'
>>> print libc.time.__doc__
time -- get time of day

IPython 似乎能够很好地解决这个问题:

In [4]: libc.time?
Type:       _FuncPtr
String Form:<_FuncPtr object at 0x1054b8ef0>
File:       /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ctypes/__init__.py
Docstring:  time -- get time of day
于 2013-01-08T20:41:33.337 回答
0

但我想使用帮助()!!!!!!

因此,我没有赢得生活的不公平,而是创建了 help_support 模块,当导入该模块时,它将允许您在文档化的 ctypes 函数和结构上使用帮助。它还允许您记录额外的内容,例如 ctypes 函数参数的名称,它们也会显示出来。

https://pypi.org/project/help-support/0.2/

如果您正在制作 Python 绑定,则包括 help_support.py 并导入它,以允许像我这样的可怜的鞋底使用您的 lib 更快地开发。

真正的文档是 A 中的痛苦……我对原始的 Python 控制台很满意。

在通过从 C 扩展将 doc 字符串添加到我的函数中做了明显的事情之后,在 help() 中没有看到任何结果并且在互联网上找不到任何解决方案,我只是无法忍受这种情况。所以你来了。现在您可以对从 DLL 中提取的函数使用 help()(至少在 Python 2 中)。

这是一个例子:

# examp_module:
import ctypes
import ctypes.util

import help_support
del help_support # If you want you can remove it now
                 # to avoid cluttering your globals() namespace.
                 # Once it is called you do not usually need it any more.

l = ctypes.CDLL(ctypes.util.find_library("c"))

# Pull the time() function from libc,
# declare and document it:
time = l.time
time.argtypes = []
#time.argnames = ["c_void"] # The function takes no arguments, but you can trick help_support 
                            # to show something in parenthesis if you want to be consistent with C
                            # If there is/are argument(s) you should put its/their name(s) in "argnames".
time.restype = ctypes.c_int
time.__doc__ = "Function that returns a system time in seconds."
-------------------------------------------
>>> # Usage:
>>> import examp_module
>>> help(examp_module)
>>> help(examp_module.time)
>>>
于 2018-07-21T01:15:09.703 回答