1

ここにdllファイルの参照があります: http://speex.org/docs/api/speex-api-reference/group__Codec.html

私が疑問に思っているのは、そのリストには多くの定義があるということです。python に相当するものは何ですか? struct クラスと同じですが、ctypes でこれらすべてを実装するためのオプションは何ですか? タイプ定義?

私はPythonの経験が比較的浅いので、スキルが十分でない場合はご容赦ください。この辺りでは教えている大学がないので、質問とグーグルで学ぼうとしています。

現在、私は基本的に、この Speex ライブラリとのインターフェース方法を理解しようとしているので、少なくともエンコード/デコード機能を使い始めることができます。しかし、これら3つの実装については確信が持てません。私はこれで頭がいっぱいだと確信していますが、最終的には、何か新しいことを学ぶことで常にトップに立つようです. 誰か私に簡単な概要を教えてくれませんか?

私が取るところによると、すべての実用的な目的で #define は基本的にただの foo = bar?
Class:Struct SpeexMode は、リストされているすべての関数を持つクラスになりますか?

それとも、これらすべてがコンパイル済み DLL で既に定義されていますか? もしそうなら、私は遭遇したチュートリアルを介してctypesで小さなdllファイル呼び出しをすでに行っています。環境をセットアップするのと同じくらい簡単でしょうか (これらの変数を関数に渡して、コーデックの品質などを設定し、エンコーダーを呼び出してから、エンコーダーを使用しますか?)

4

2 に答える 2

2

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++ インターフェイスから Python へのより自動化されたコンバーターを探している場合は、SWIGを参照してください。SWIG は、 とは異なりctypes、純粋な Python に加えて C コンパイラを使用する必要があります。

于 2009-11-21T06:31:24.153 に答える
0

少なくとも構造体と、それらを基本的に変換する方法を理解しました。

基本的には、クラスを作成し、それに 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とセットアップで定義されていると確信していますよね?

于 2009-11-21T04:48:59.010 に答える