3

シナリオは次のとおりです。ctypes を使用して、C DLL を Python プログラムにロードしています。コールバックを登録して、DLL のコードが Python の関数を呼び出せるようにしたいと考えています。

関数を可変長にしたいまで、これはすべて素晴らしいことです。たとえば、Python で「printf」を実装したいとします (引数のために、整数を返すようにもします)。

def printf(format, *args):
    (...)
    return 0

ctypes の CFUNCTYPE ファクトリを使用して、コールバック関数ポインタを作成しています。

callback_type = CFUNCTYPE(c_int, c_wchar_p)

もちろん、入力引数 (Unicode char 配列としてのフォーマット文字列) を 1 つしか指定していないため、コールバックは機能しますが、*args空です。

それで、ctypesでこれを機能させる方法はありますか、それとも可変引数コールバック関数を必要としないようにCコードを書き直す必要がありますか?

4

1 に答える 1

2

いいえ、基盤となる libffi ではサポートされていません。実際、カスタム C コードを作成する必要があります。

(Fwiw、CFFIは ctypes の代替手段です。これも libffi に基づいているため、同じ制限がありますが、少なくともインターフェースを行うための C コードのカスタム部分を簡単に作成できます。)

于 2012-12-13T22:22:02.140 に答える