小编MrS*_*ish的帖子

Python ctypes 用法传递指针

我正在尝试从 python 2.7 中的 C 库调用函数。到目前为止,我对大多数教程或信息感到困惑。

C 函数接受 3 个双精度数(标记为 h、k、l)和 2 个指向双精度数 (*p, *q) 的指针来迭代求解这两个双精度数,为简单起见,初始化为 0.0。该函数不返回任何内容,它只是使用指针来修改 p 和 q 的值。

我当前的代码如下:

import ctypes
path = '/foo/bar.so'
_lib = ctypes.CDLL(path)
_lib.solve.argtypes = (ctypes.c_double, ctypes.c_double, ctypes.c_double, ctypes.POINTER(ctypes.c_double), ctypes.POINTER(ctypes.c_double))

def py_solve(h, k, l):
    global _lib
    p, q = ctypes.c_double(0.0), ctypes.c_double(0.0)
    _lib.solve(ctypes.c_double(h), ctypes.c_double(k), ctypes.c_double(l), ctypes.POINTER(p), ctypes.POINTER(q))
    return float(p), float(q)
Run Code Online (Sandbox Code Playgroud)

我得到:

'TypeError: must be a ctypes type'
Run Code Online (Sandbox Code Playgroud)

在我的 py_solve 函数中调用 _lib.solve(...) 的行。也许使用 ctypes 的 byref() 函数会更简单,但我也不确定如何做到这一点。任何帮助表示赞赏,谢谢。

python ctypes pointers

4
推荐指数
1
解决办法
6855
查看次数

标签 统计

ctypes ×1

pointers ×1

python ×1