问题标签 [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.
python - 如何将 Numpy 数组传递给 cffi 函数以及如何将其取出?
我正在使用 Python 和 Numpy 开发音频算法。现在我想通过在 C 中实现它的一部分来加速该算法。过去,我使用 cython 完成了这项工作。现在我想使用新的cffi做同样的事情。
出于测试目的,我编写了一个简单的 C 函数:
现在我想创建两个 numpy 数组并由这个函数处理。我想出了一个办法:
但是,我想改进此代码:
- 有没有办法直接访问 numpy 数组的底层浮点缓冲区而不复制它们?
ffi.buffer
非常方便快速将 C 数组的内容转换为 Numpy 数组。有没有一种等效的方法可以在不复制单个元素的情况下快速将 numpy 数组转换为 C 数组?- 对于某些应用程序来说,
float_in[0:16] = arr_in[0:16]
这是一种访问数据的便捷方式。相反,arr_out[0:16] = float_out[0:16]
它不起作用。为什么不?
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 编译器)?
python - Python-C 集成:Ctypes、CFFI 或创建二进制模块
基本上我想用 C 编写一个 Python 程序调用函数。
所以(据我所知)我的选择是:
- CTypes/ CFFI
- Python 二进制模块
- 用C写一个python接口,把我的C模块转换成二进制python模块
- 优点:
- 表现 ?
- 缺点:
- 所有类型转换都是在 C 中完成的。使用 [SIP][3] 这可能是自动化的。
将 C 模块转换为 python 二进制模块真的更快吗?
两种解决方案都支持向 C 函数发送 python 回调吗?
SIP 是生成 python 接口的好选择吗?还有其他选择吗?
他们中的任何一个还有其他特殊性吗?
python - Python CFFI + 7z.dll (COM) == 访问冲突(有时)
我已将我的代码缩短为一个最小的用例。
该脚本总是完成,但大约 50% 的时间它给出了内存访问冲突/崩溃。
这是在 Windows 7 上使用 64 位 Python 3
这段代码应该遍历 7zip 的所有处理程序并说明它们支持哪些扩展(一个空格分隔的列表,可能是空的......不是 VT_EMPTY,只是 bstrVal=L"")
令人烦恼的是,等效ctypes
代码似乎工作得很好。
python - 在 Python CFFI 中声明包含 time_t 字段的结构
我正在使用 CFFI 从 Python 调用返回结构的 C 函数。该结构是用一个time_t
元素定义的。如何将结构声明为 CFFI,以便我可以从 Python 访问它?
例如,我尝试了以下(获取文件的修改时间):
这给出了一个错误:
它在注释掉该行后编译time_t tv_sec;
,但当然你不能访问该tv_sec
字段。据推测,CFFI 的 C 解析器不支持 typedef。您不能只替换time_t
为实际类型,因为不同平台上的类型可能不同。
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
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,包括安全考虑。
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编程,所以我对这些东西的工作原理有一个模糊的了解,但我一直无法解决这个问题。
python - Python CFFI 将结构转换为字典
有一种方法可以用字典初始化结构:
是否有一些现成的功能可以进行转换?
我必须自己使用 ffi.typeof("foo_t").fields 吗?
到目前为止,我想出了这段代码:
有更快的方法吗?