问题标签 [python-cffi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
171 浏览

gevent - 关于 gevent (cffi) 设置的一些混淆

在 Gevent 1.1 中有两个后端,cython 和 cffi。我感到困惑的是_corecffi_build.py

第 331 行

我不知道为什么ffi.set_source没有指定以包含相关的 c 文件。_source包含一些声明。

c源文件是如何包含的?

0 投票
1 回答
1197 浏览

python - Python CFFI - 无法在函数调用中使用格式化的 Python 字符串作为字节数组

我正在学习如何包含写入代码的各种方法,C因为Python我有一个用于 Microchip 设备的 API,使用起来非常……乏味,我想通过添加一个Python包装器来让我的生活更轻松它可以让我更快地测试东西。这样做的一种方法是使用cffi模块,该模块甚至为其用户提供verify()基本上调用C编译器以检查所提供cdef(...)的是否正确的模块。

我写了一个小项目,以便我可以首先学习如何正确使用cffi. 它由两部分组成

  1. - 用 C 编写。我使用cmakemake相应地编译它的代码:

    CMakeLists.txt

    testcffi.h

    testcffi.c

    /li>
  2. Python 中的测试代码struct- 代码演示了上述库中的三个函数的用法:

    /li>

问题来自我必须将Python字符串转换为的字节数组,以便将数据传递到C代码中的相应位置。

上面的代码正在运行,但是我想使用其他类似于b'hello'. 这就是为什么我尝试使用format()(连同它的缩写%) inPython来组合一堆字母和一个数字但是。它没有成功。我要么得到my 参数的""值,要么得到一个奇怪的交替垃圾数据(主要是既不是字母也不是数字的奇怪字符)。labelpoint_t struct

我以为我使用的encode()函数不正确,但是当我在Python交互式 shell 中测试它时,我得到了与 using 相同的输出b'...'

知道这里发生了什么吗?


一个很好知道的问题:从我目前所读的内容来看,似乎cffi使用垃圾收集Python来释放 C 代码中动态分配的内存。我已经用一堆点测试了它,但我想确保这实际上总是如此。


更新: 好的,所以看起来没有new(...)做的事情但是在这种情况下所有的值都与循环中的最后一个值相同。例如,如果循环达到 10,那么所有structPython 对象的标签中都会包含 10。这似乎是一个参考问题。当我使用时,new(...)我得到垃圾数据。

0 投票
1 回答
1097 浏览

python - 取消引用在 Python CFFI 中使用 ffi.addressof 创建的指针(等效于 C *-operator?)

使用 Python CFFI,上面的代码创建了一个指向 as 的第一个元素的values指针pValue

然后,您可以使用 访问其内容values[ 0 ],但这并不是真正透明的,并且有时不方便跟踪什么索引是什么值。

是否有诸如 C *-operator、函数或其他东西之类的东西可以取消引用pValue并直接访问其内容?

在其他语言中...:

编辑:
这是一个有用的用例:

我发现这样做更具可读性:

而不是:

我猜前者更快。但是,当您想访问这些值时,记住“ok type is number 0”等不方便......

0 投票
1 回答
1189 浏览

c++ - 如何在 CFFI 中找到指向结构的指针的地址并将其转换为 void**

我的 C++ 代码是

我的功能是

我是 CFFI 的新手。所以我的问题是

  1. 我怎样才能在 CFFI 中达到同样的效果?

  2. 如何在CFFI中找到指针的地址,指向结构的指针?

我知道铸造void**可以通过

但是我怎样才能得到那个地址并传递给函数呢?

0 投票
1 回答
749 浏览

windows - 如何在 Windows 7 64 位上安装 Cffi python 模块?

有没有办法在不使用 MinGW 的情况下在 Windows 7 64 位环境中开始使用 cffi ?需要安装哪些所有软件包?

0 投票
1 回答
2301 浏览

python - How to properly wrap a C library with Python CFFI

I am trying to wrap a very simple C library containing only two .C source files: dbc2dbf.c and blast.c

I am doing the following (from the documentation):

This is not quite working. I think I am not including blast.c correctly;

can anyone help?

0 投票
1 回答
285 浏览

python - 如何通过 FFI 传递 Numpy PyArray*

想法是能够从库中修改数组,就像函数的“输出”一样。例子:

0 投票
1 回答
291 浏览

python - pip install -d 不为 cffi 创建轮子

我正在尝试为 python 代码创建“离线包”。

我正在运行 pip install -d <dest dir> -r requirements.txt 事情是cffi==1.6.0(在 requirements.txt 中)没有内置到轮子中。

有没有办法我可以做到?(我试图避免目标机器中 gcc 的依赖)

0 投票
0 回答
1403 浏览

python-3.x - cffi.api.CDefError:解析错误 Python

使用 cffi,我试图在 Python 代码中调用一些 Rust 函数。这是python代码:

这是锈代码:

我编译了这个库:

但是当我运行我的 python 脚本时,我得到了这个堆栈:

我错过了什么吗?

我尝试了几个版本:ffi.cdef('float norm(float**)'). 喜欢ffi.cdef('float norm(Vec< Vec<float>>)')ffi.cdef('float norm(float[][])') 但它也不起作用。

感谢您以后的回复。

0 投票
1 回答
318 浏览

python - CFFI 能否在 Python 3.4 和 3.5 中使用相同的 DLL?

此页面记录了每个 Python 版本所需的不同版本的 Microsoft Visual C++ 编译器:https ://wiki.python.org/moin/WindowsCompilers

我想使用 MinGW 而不是 Microsoft 为 64 位 Windows 8.1 编译 C 库,但我读过 MinGW-w64/mingwpy 不支持 Python 3.5: Make cffi use MinGW under Python 3.5 on Windows

我还看到http://mxe.cc/用于交叉编译到 Windows,但它也使用 MinGW-w64 工具链。

如果我对 Python 接口使用 CFFI 的 ABI 内联模式,我可以为 C 库编译一次 DLL(与 Microsoft Visual C++ 10.0 兼容)并将其与 Python 3.4 和 3.5 一起使用吗?如果是这样,是否因为静态链接到 DLL 而实现了与 Python 3.5 的兼容性?我不明白动态与静态链接的微妙之处。