问题标签 [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 投票
5 回答
10346 浏览

python - 如何将 Numpy 数组传递给 cffi 函数以及如何将其取出?

我正在使用 Python 和 Numpy 开发音频算法。现在我想通过在 C 中实现它的一部分来加速该算法。过去,我使用 cython 完成了这项工作。现在我想使用新的cffi做同样的事情。

出于测试目的,我编写了一个简单的 C 函数:

现在我想创建两个 numpy 数组并由这个函数处理。我想出了一个办法:

但是,我想改进此代码:

  1. 有没有办法直接访问 numpy 数组的底层浮点缓冲区而不复制它们?
  2. ffi.buffer非常方便快速将 C 数组的内容转换为 Numpy 数组。有没有一种等效的方法可以在不复制单个元素的情况下快速将 numpy 数组转换为 C 数组?
  3. 对于某些应用程序来说,float_in[0:16] = arr_in[0:16]这是一种访问数据的便捷方式。相反,arr_out[0:16] = float_out[0:16]它不起作用。为什么不?
0 投票
1 回答
1939 浏览

python - 如何配置 python cffi 库以使用 mingw?

尝试在 Windows 上调用 cffi.FFI.verify() 将产生此错误:

我想用mingw来编译而不是msvc。我试图通过创建 c:\Python27\Lib\distutils\distutils.cfg 来让 distutils 使用 mingw

但这似乎不影响 cffi,我仍然得到 vcvarsall.bat 丢失错误。

那么如何让 cffi 使用 gcc/mingw (或一般其他 C 编译器)?

0 投票
1 回答
5827 浏览

python - Python-C 集成:Ctypes、CFFI 或创建二进制模块

基本上我想用 C 编写一个 Python 程序调用函数。

所以(据我所知)我的选择是:

  • CTypes/ CFFI
    • 创建一个包含 C 函数的 DLL/SO/DyLib 并使用 CTypes 或CFFI访问它们。显然CFFI速度更快,唯一的缺点是必须在 python 中声明所有函数签名。
    • 优点:
      • 不必对我的 C 函数进行任何调整。所有类型转换都是在 Python 中完成的。
    • 缺点:
      • 表现 ?
  • Python 二进制模块
    • 用C写一个python接口,把我的C模块转换成二进制python模块
    • 优点:
      • 表现 ?
    • 缺点:
      • 所有类型转换都是在 C 中完成的。使用 [SIP][3] 这可能是自动化的。

将 C 模块转换为 python 二进制模块真的更快吗?

两种解决方案都支持向 C 函数发送 python 回调吗?

SIP 是生成 python 接口的好选择吗?还有其他选择吗?

他们中的任何一个还有其他特殊性吗?

0 投票
1 回答
532 浏览

python - Python CFFI + 7z.dll (COM) == 访问冲突(有时)

我已将我的代码缩短为一个最小的用例。

该脚本总是完成,但大约 50% 的时间它给出了内存访问冲突/崩溃。

这是在 Windows 7 上使用 64 位 Python 3

这段代码应该遍历 7zip 的所有处理程序并说明它们支持哪些扩展(一个空格分隔的列表,可能是空的......不是 VT_EMPTY,只是 bstrVal=L"")

令人烦恼的是,等效ctypes代码似乎工作得很好。

0 投票
1 回答
466 浏览

python - 如何使用 cffi 调用 __cdel 修饰函数?

嗨@eryksun 和 Python 专家:

我正在尝试cffi使用以下命令将 dll 文件导入 python:

从上一个关于ctypes的问题中,我知道DLL都是 cdecl (感谢@eryksun 的提示),并且我能够以下列方式访问它的函数:

但是,我不确定 cffi 中的等效操作是什么。lib._InitializeBIRDSystem在 ctypes 下工作,但不在 cffi 下工作。有什么建议吗?

感谢您查看这个,

埃里克

0 投票
1 回答
2174 浏览

python - 在 Python CFFI 中声明包含 time_t 字段的结构

我正在使用 CFFI 从 Python 调用返回结构的 C 函数。该结构是用一个time_t元素定义的。如何将结构声明为 CFFI,以便我可以从 Python 访问它?

例如,我尝试了以下(获取文件的修改时间):

这给出了一个错误:

它在注释掉该行后编译time_t tv_sec;,但当然你不能访问该tv_sec字段。据推测,CFFI 的 C 解析器不支持 typedef。您不能只替换time_t为实际类型,因为不同平台上的类型可能不同。

0 投票
1 回答
2180 浏览

python - 回调后python cffi崩溃

我有一个与 USB 设备接口的专有 dll,它的 ctypes 接口工作正常,但 cffi 在调用回调后崩溃。如果找到设备,函数 SwitchOn(6) 应该返回指向结构的指针,如果没有,则返回 NULL,如果它没有找到设备错误回调,则使用 errno=10 调用。

我正在使用 python27,py33 的行为相同(需要删除“导入线程”才能运行)

我用对了吗?我该如何调试它?

按照abarnert的建议,尝试根据我的需要调整 doc 的示例。它仍然崩溃。我做对了吗?

ctypes 示例输出:

cffi 示例输出:

和崩溃

cffi_crash.py

ctypes_no_crash.py

cffi_indirection.py

0 投票
2 回答
1119 浏览

android - Python 和 Dalvik 或 AAF 之间的原生桥梁

有没有在同一地址空间中连接 Python 和 Dalvik 的项目?

那就是用一种语言创建的对象可以在另一种语言中注册为侦听器,反之亦然?

--

Python 可以是 CPython 或 PyPy;

Dalvik 可以是完整的 Android 应用程序框架,或者只是 Dalvik 虚拟机,或者在最坏的情况下,甚至可以是非 Dalvik JVM;

Bridge 可以用 Python/cffi、Python/jni、本机 C/C++ 代码甚至 java 编写。

据我所知,脚本环境并没有做我想做的事。

如果完全没有 Python--Dalvik 桥,我将把全功能的基于 C/C++ 的 C/C++--Dalvik 桥作为最后的有效答案。然后需要一个在 C/C++ 领域实例化 on 对象的示例,该对象可以在运行时作为有效侦听器提交给某些 Android API,包括安全考虑。

0 投票
2 回答
7536 浏览

python - 加载 dll 时 Python CFFI 模块失败:OSError 0x7e

我在 64 位 Windows 7 下运行 Python 3.3(Anaconda 发行版)。我试图安装 Weasyprint 应用程序/库,它有许多依赖项,包括 CFFI,我必须从源代码编译它,因为二进制发行版中没有它的兼容版本。

当我运行 weasyprint 时,它在导入加载过程中阻塞,特别是当它调用 CFFI 以加载 Cairo 的 GTK+ 库 dll 时。我得到的错误如下:

我拥有的环境如下:Windows 7.1 64位,Python 3.3 64位,CFFI在Visual Studio 2010下编译(由我),64位环境,开罗的libcairo-2.dll也是64位版本.

我不是 Windows 程序员,我只是钻研这个烂摊子,因为我想让 Weasyprint 为另一个(Python 语言)项目工作。我很久以前在Delphi下做过一点Windows编程,所以我对这些东西的工作原理有一个模糊的了解,但我一直无法解决这个问题。

0 投票
3 回答
1882 浏览

python - Python CFFI 将结构转换为字典

有一种方法可以用字典初始化结构:

是否有一些现成的功能可以进行转换?

我必须自己使用 ffi.typeof("foo_t").fields 吗?

到目前为止,我想出了这段代码:

有更快的方法吗?