pythonctypes&;libspeex.dll/libspeex.so;定义、类型定义和结构的等价物是什么?

pythonctypes&;libspeex.dll/libspeex.so;定义、类型定义和结构的等价物是什么?,python,c,api,ctypes,speex,Python,C,Api,Ctypes,Speex,我在这里有一个dll文件的引用: 我想知道的是,在这个列表中,有很多定义。什么是python等价物,对于struct类也是一样,我用ctypes实现所有这些的选项是什么?Typedefs 我对python相对缺乏经验,所以如果我的技能不够,请原谅。这里没有大学教它,所以我试着通过询问和谷歌来学习 现在我只是想弄清楚如何与这个speex库进行接口,这样我至少可以开始使用encode/decode函数。但我不确定这三件事的实施情况。我肯定我对这件事感到很困惑,但最后我似乎总是能从中学习到新的东西。

我在这里有一个dll文件的引用:

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

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

现在我只是想弄清楚如何与这个speex库进行接口,这样我至少可以开始使用encode/decode函数。但我不确定这三件事的实施情况。我肯定我对这件事感到很困惑,但最后我似乎总是能从中学习到新的东西。有人介意给我简要介绍一下吗

根据我的理解#在所有实际用途中定义基本上只是foo=bar?
和Class:Struct-SpeexMode将是一个类,它具有所有列出的函数


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

我至少了解了结构,以及如何基本上转换它们

基本上,您只需创建一个类,向它传递ctypes.Structure,然后创建字段数组

像这样:

class PASSWD(ctypes.Structure):
_fields_ = [("name", ctypes.c_char_p),
            ("passwd", ctypes.c_char_p),
            ("uid", ctypes.c_int),
            ("gid", ctypes.c_int),
            ("change", ctypes.c_long),
            ("class", ctypes.c_char_p),
            ("gecos", ctypes.c_char_p),
            ("dir", ctypes.c_char_p),
            ("shell", ctypes.c_char_p),
            ("expire", ctypes.c_long),
            ("fields", ctypes.c_int)   ]

但我不太确定我是否需要设置这些。我很确定它们都是在DLL和安装程序中定义的,不是吗?

要使用structs,确实应该用
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
>>>
>>从ctypes导入*
>>>课程点(结构):
...     _字段=[(“x”,c_int),
…(“y”,c_int)]
...
>>>点=点(10,20)
>>>打印点.x,点.y
10 20
>>>点=点(y=5)
>>>打印点.x,点.y
0 5
>>>第(1、2、3)点
回溯(最近一次呼叫最后一次):
文件“”,第1行,是否在中?
ValueError:初始值设定项太多
>>>
至于定义,它们通常是include文件的一部分,因此您只需在Python代码中自己定义它们,因为C编译器甚至看不到它们(定义由预处理器转换为它们的值)


如果您正在寻找从C/C++接口到Python的更自动的转换器,请参阅。与
ctypes
不同,SWIG要求您在纯Python之外使用C编译器。

感谢您提供了这个示例这真的帮助我理解了structs是如何工作的我不知道你以后可以这样调用它们,将它们赋给一个变量,然后能够执行[variable]。[field]——这是非常宝贵的。而且——我真的认为我现在更喜欢使用ctypes,因为这意味着以后我可以拖放我的DLL的新版本,而且我可以让DLL从可执行文件中卸载。稍后,我可以通过发送一个新的dll来“自动更新”我的程序;至少,我希望事情会这样发展;)