使用CFFI从Python传递指向C函数的指针的最佳方法

时间:2017-08-13 03:52:30

标签: python python-cffi

我想在第三方库中为C函数创建一个Python包装器,该库具有一个签名,例如

int f(double* x);

其中函数f修改输入参数x(即,使用指针通过引用调用)。实现Python包装器函数的最有效方法是什么,以便Python用户可以将其视为每次只返回一个新数字的函数?示例伪代码:

# lib and ffi are imported from a compiled cffi.FFI() object
def python_f():
    ??? double x; ???
    rc = lib.f(&x)
    assert rc == 0
    return x

我应该使用数组模块(例如,创建一个大小为1的“double”数组,将其传递给函数,并返回第一个索引)?是否有更轻量级的方法使用ctypes或cffi辅助函数?

1 个答案:

答案 0 :(得分:2)

def python_f():
    x_ptr = ffi.new("double[1]")
    x_ptr[0] = old_value
    rc = lib.f(x_ptr)
    assert rc == 0
    return x_ptr[0]