在 Python 中创建 C 库的包装器

2024-06-14

我正在尝试为 FLAC 创建自己的包装器,以便我可以在自己的 Python 代码中使用 FLAC。

我首先尝试使用 ctypes,但它显示了一个非常奇怪的库界面,例如FLAC 流和文件的所有初始化函数都变成了一个函数,没有关于如何初始化它的实际信息。特别是因为它需要对流解码器的引用,但 Python 无法存储指针(BZZZT! http://docs.python.org/library/ctypes.html#fundamental-data-types),因此我无法存储指向流解码器的指针。不同的 init 函数具有不同数量的参数并且某些参数类型不同,这并没有帮助。它还有很多枚举和结构,我不知道如何将它们放入我的代码中。

我一直在研究 Pyrex,但我在指针方面遇到了同样的问题,但我想我已经解决了它。文件也不小,而且还不完整。 http://github.com/Bocom/zet-subou-/blob/db6d1d37068c936f1e3a98b09ec038b38b7d25e0/flac_wrapper.pyx

因此,我正在寻找替代方案或指南来帮助我更好地理解上述方法。如果我能得到推荐和/或帮助,那真的会有帮助。


Python无法存储指针,因此我无法存储指向流解码器的指针

ctypes有指针,并且 ctypes 可用于包装现有的 C 库。只是提示,您需要将所有相关的 C 结构包装/重写到 ctypes.Structure 中。 看一下例子:code.google.com/p/pyxlib-ctypes http://code.google.com/p/pyxlib-ctypes/ and code.google.com/p/pycairo-ctypes http://code.google.com/p/pyxlib-ctypes/。更多信息如何映射函数/过程及其argtypes and restype at http://docs.python.org/library/ctypes.html http://docs.python.org/library/ctypes.html

我一直在研究 Pyrex,但我在指针方面遇到了同样的问题,但我想我已经解决了它。文件也不小,而且还不完整。

cython如果您想要干净的语法,可能就是您所需要的。www.cython.org http://www.cython.org

因此,我正在寻找替代方案或指南来帮助我更好地理解上述方法。如果我能得到推荐和/或帮助,那真的会有帮助。

swig另一方面,总是可以使用,但如果您不习惯它会更复杂。www.swig.org http://www.swig.org

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 中创建 C 库的包装器 的相关文章

随机推荐

  • FPDF 多单元对齐不起作用

    我的 pdf 中有这个多单元格 pdf gt multicell 115 6 name 1 0 L 1 但事实证明文本是右对齐而不是左对齐 我发现同样的问题here https stackoverflow com questions 153
  • intellij idea运行配置备份

    我想创建一个脚本来修改 intellij 中的调试配置 tomcat的路径发生了变化 我必须手动进入运行配置并编辑内容 我试图找到intellij存储这些设置的地方 但没有成功 question 有谁知道 IJ 在哪里存储其运行配置 该位置
  • 如何将值传递到 selectOneMenu 中的监听器

    我有 2 个下拉菜单 类型和代码 如果值 A 或 B 或 C 我希望代码下拉列表根据类型下拉列表更改值 如何将 A 或 B 或 C 的值传递给侦听器 以便它可以理解和处理我的 List
  • 使用 swift 准备 ForSegue 集合查看索引路径

    我没有找到任何好的例子来使用 swift 做我想做的事情 所以我允许自己问这个问题 我使用 collectionView 来显示 PFObjects 我想使用prepareForSegue 将显示的单元格数据发送到第二个控制器 此时 我正在
  • 确定当前变更集在哪些分支中

    我需要以编程方式跟踪变更集 确定变更集当前位于哪个分支 Update 假设我们的项目有三个分支 开发 测试和发布 每当我们准备好使用一些变更集时 我们首先将它们合并到测试中 然后在测试完成后立即将它们合并到发布中 我需要知道给定的变更集位于
  • 是什么让一个 singleTask 活动有 2 个实例?

    根据docs https developer android com guide topics manifest activity element lmode singleTask 活动不能有多个实例 我的应用程序的唯一活动是 single
  • 如何使用 HTML5 与 UDP 套接字通信?

    我拥有的 正在运行的 C 应用程序服务器 准备将数据发送到应该发送到 HTML5 页面或应用程序的客户端 我想要的是 考虑到 c 服务器和 HTML5 应用程序都是系统本地的 有没有办法使用 udp 端口 与 HTML5 进行通信 我知道的
  • Google Apps 脚本中的范围要求过高

    Here s 自定义 Google 表格 https docs google com spreadsheets d 1qwOzxP qHWRhI2HZmGdlgKLlXCYIQz4XO2tq1EY 8NE edit gid 0与脚本代码 v
  • “ReactNode”不是有效的 JSX 元素

    我有以下代码 代码沙箱 https codesandbox io s react typescript forked 50beyp file src App tsx import ComponentType ReactNode from r
  • SQL 多次更新与单次更新性能

    假设我有 10 000 行需要更新 什么会更快 UPDATE DB Servers SET Live 1 where name server1 UPDATE DB Servers SET Live 1 where name server2
  • 使用 CMK 的 SQS 加密

    我正在尝试从加密的 SQS 读取消息 对象落在 S3 存储桶上 gt 触发 S3 事件 gt 消息发送到 SQS gt SQS 触发 Lambda 进行处理 我已经使用 AWS 托管的 CMK 完成了这项工作 但是 我无法使用 AWS 拥有
  • PyCharm 无法识别已安装的模块

    我在 Mac 上使用 请求 模块时遇到问题 我使用 python34 并通过 pip 安装了 requests 模块 我可以通过再次运行安装来验证这一点 它会告诉我该模块已经安装 15 49 29 mymac pip install req
  • 我们可以使用什么方法来重塑非常大的数据集?

    当由于非常大的数据计算将花费很长时间并且因此我们不希望它们崩溃时 事先知道要使用哪种重塑方法是很有价值的 Lately methods for reshaping data have been further developed regar
  • Outlook for Mac 缺少加载项命令按钮组标签

    Outlook 加载项清单应该适用于 PC 桌面 Outlook OWA 和 Outlook for Mac 情况似乎大多如此 但我们注意到 Outlook for Mac 存在问题 Outlook for Mac 似乎没有按钮组标签 以
  • 如何实现快捷键的键盘处理程序cefSharp

    我正在构建一个用于浏览网页的 Windows 应用程序cefSharp 我需要在该应用程序中实现一些快捷键 任何人都可以告诉我如何实现此功能 Ex ctrl tab move to next tab 我能够跟踪用户是否按下任何单个键 但无法
  • matlab中的正则逻辑回归代码

    我正在尝试正则化 LR 在 matlab 中使用以下公式很简单 成本函数 J theta 1 m sum y i log h x i 1 y i log 1 h x i lambda 2 m sum theta j 梯度 J theta t
  • javascript中的父子关系排序

    我有以下结构 category id 1 parent category null category id 2 parent category 1 category id 3 parent category 1 category id 4
  • 如何替换异常值?

    我有以下数据框 d lt data frame Open rnorm 10 5 1 如果我插入异常值 d Open 4 100 d Open 5 100 现在我想用正常值替换这些异常值 我尝试用以前的值替换它 但如果逐个出现异常值 则它不起
  • 如何在没有 ASP.NET 的情况下从 json 客户端调用 .NET AuthenticationService

    我有一个 WCF 4 服务 位于安全子文件夹中 在客户端使用 NET AuthenticationService 使用表单身份验证进行身份验证后可以访问该服务 此 WCF 服务适用于通过 json 进行通信的移动应用程序客户端 但不是 AS
  • 在 Python 中创建 C 库的包装器

    我正在尝试为 FLAC 创建自己的包装器 以便我可以在自己的 Python 代码中使用 FLAC 我首先尝试使用 ctypes 但它显示了一个非常奇怪的库界面 例如FLAC 流和文件的所有初始化函数都变成了一个函数 没有关于如何初始化它的实