gpt4 book ai didi

Python ctypes & libspeex.dll/libspeex.so; #define、typedef 和结构的等价物是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 03:08:20 24 4
gpt4 key购买 nike

我在这里有一个 dll 文件的引用: http://speex.org/docs/api/speex-api-reference/group__Codec.html

我想知道的是,在那个列表中,有很多定义。什么是 python 等价物,对于 struct 类也是如此,我用 ctypes 实现所有这些的选项是什么?类型定义?

我对 python 相对缺乏经验,所以如果我的技能不够,请原谅我。这里没有大学教它,所以我试图通过询问和谷歌来学习。

现在我只是想从根本上弄清楚如何与这个 speex 库交互,这样我至少可以开始使用编码/解码功能。但我不确定这三件事的实现情况。我敢肯定我对这个很在意,但最后我似乎总是在学习新东西方面名列前茅。有人介意给我简要介绍一下吗?

据我所知,#define 在所有实际用途中基本上只是 foo = bar?
而 Class:Struct SpeexMode 将是一个具有所有列出的功能的类?

或者所有这些都已经在编译的 DLL 中定义了吗?如果是这样,我已经通过我遇到的教程用 ctypes 完成了一个小的 dll 文件调用。会不会像设置环境一样简单(将这些变量传递到函数中以设置诸如编解码器质量之类的东西,调用编码器,然后使用编码器?)

最佳答案

要使用结构,您确实应该用 ctypes.Structure 声明它们,让 Python 知道它们。

>>> from ctypes import *
>>> class POINT(Structure):
... _fields_ = [("x", c_int),
... ("y", c_int)]
...
>>> point = POINT(10, 20)
>>> print point.x, point.y
10 20
>>> point = POINT(y=5)
>>> print point.x, point.y
0 5
>>> POINT(1, 2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ValueError: too many initializers
>>>

至于定义,它们通常是包含文件的一部分,所以你只需要在 Python 代码中自己定义它们,因为 C 编译器甚至看不到它们(定义被转换为它们的值预处理器)。

如果您正在寻找从 C/C++ 接口(interface)到 Python 的更自动的转换器,请查看 SWIG . SWIG 与 ctypes 不同,除了纯 Python 之外,还需要您使用 C 编译器。

关于Python ctypes & libspeex.dll/libspeex.so; #define、typedef 和结构的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1774383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com