質問

このはhref="https://stackoverflow.com/questions/867850/creating-a-wrapper-for-ac-library-in-python">私の他の質問を関連しているが、私は新しい質問でそれを求める必要がありますように感じます。

基本的にはFLACは、あなたがそれらのプロトタイプを作成するためにCFUNCTYPEを使用して、あなたがそれらを作成するためにprototype()機能を使用し、コールバック関数ポインタを使用し、ctypesのでコールバックを実装します。

私はこれを持っている問題は、私は私のような私のコールバック関数を作成することを考え出していることである(私は再作成されている構造を示すわけではない、FLAC__Frameは構造です):

write_callback_prototype = CFUNCTYPE(c_int, c_void_p, 
                                     POINTER(FLAC__Frame), 
                                     POINTER(c_int32), v_void_p)

私が持っている問題は、実装です。 FLAC__Frameはプログラマによってインスタンス化されることはありません、それが唯一の初期化関数からから呼び出され、処理functions.Iは、コールバック関数を自分で記述する必要があり、彼の問題は、私はこれを行うだろうか分からないということですので、誰であればです私はこれを行うべきかを知って、その後、いくつかの助けをいただければ幸いです。

役に立ちましたか?

解決

ctypesのコールバックのドキュメントでは、Pythonの関数を定義することができますを

def my_callback(a, p, frame, p1, p2)
    pass

と、このようなC呼び出し可能な関数へのポインタを作成します。

callback = write_callback_prototype(my_callback)

この関数ポインタは、その後、FLACに渡すことができます。

他のヒント

  

私が持っている問題は、実装です。 FLAC__Frameはプログラマによってインスタンス化されることはありません、それが唯一の初期化関数からから呼び出され、処理functions.Iは、コールバック関数を自分で記述する必要があり、彼の問題は、私はこれを行うだろうか分からないということですので、誰であればです私はこれを行うべきかを知って、その後、いくつかの助けをいただければ幸いです。

その場合は、単に使用します:

import ctypes

class FLAC__Frame(ctypes.Structure):
    pass

と、それがすでに定義されていることをふり、そしてあなただけ基本的にメモリ内の位置である、それへのポインタを必要とするので、気にしないでください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top