我正在用Python编写C库的包装。我正在尝试正确注释所有方法,因此我的IDE可以帮助我捕获错误。我被困在注释一种方法上,您能帮我找出正确的注释吗?
C库中的一种方法如下:
使用一个arg:指向字符缓冲区的指针
char_buffer = ctypes.create_string_buffer(16)
使用输出值填充char缓冲区
CMethod(char_buffer)
然后通过执行类似char_buffer.value
的操作来解析缓冲区。
如何注释包装器方法以查找指向字符缓冲区的指针?目前,我有以下内容,但我认为这是不正确的,因为POINTER
似乎只是_ctypes.py
中的一个函数。
from ctypes import POINTER
def wrapped_method(char_buffer: POINTER):
CMethod(char_buffer)
答案 0 :(得分:1)
根据[Python 3.Docs]: ctypes.create_string_buffer(init_or_size, size=None):
此函数创建一个可变字符缓冲区。返回的对象是c_char的ctypes数组。
示例:
>>> import ctypes >>> >>> CharArr16 = ctypes.c_char * 16 >>> s = ctypes.create_string_buffer(16) >>> >>> isinstance(s, CharArr16) True >>> isinstance(s, ctypes.c_char * 15) False >>> isinstance(s, ctypes.c_char * 17) False >>> >>> # A more general form, but it WILL FAIL for non array instances ... >>> isinstance(s, s._type_ * s._length_) True >>> >>> # A more general form that WILL WORK ... >>> issubclass(CharArr16, ctypes.Array) True >>> isinstance(s, ctypes.Array) True