シナリオは次のとおりです。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コードを書き直す必要がありますか?