在ctypes中传递指向函数的结构指针

2024-05-14 00:38:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在ctypes中重做Misaka模块,但是当我尝试使用bufputs时,我得到了一个错误(参见第二个代码示例末尾)。当我传递指向函数的指针时,我使用pointer(b)。这不起作用,byref(b)也不起作用。在

这是函数签名:

/* bufputs • appends a NUL-terminated string to a buffer */
void
bufputs(struct buf *, const char*);

这是我的代码:

^{pr2}$

我不知道我做错了什么。在


Tags: 模块函数代码示例错误ctypes指向末尾
1条回答
网友
1楼 · 发布于 2024-05-14 00:38:46

最初发布在问题中的OP解决方案

class buf(Structure):
    _fields_ = [
        ('data', c_char_p),
        ('size', c_size_t),
        ('asize', c_size_t),
        ('unit', c_size_t),
        ('ref', c_int)
    ]
buf_p = POINTER(buf)

sundown.bufnew.argtypes = [c_size_t]
sundown.bufnew.restype = buf_p
sundown.bufgrow.argtypes = [buf_p, c_size_t]
sundown.bufputs.argtypes = [buf_p, c_char_p]

ib = buf()

# ctypes does this internally:
# memset(byref(ib), 0x0, sizeof(buf))

text = 'this is some text'
ib.data = text
ib.size = len(text)

ob = sundown.bufnew(128)
sundown.bufgrow(ob, int(math.ceil(ib.size * 1.4)))

sundown.bufputs(ob, 'test')

相关问题 更多 >