関数のアドレスとその「cのような」表現も持っています(llvmliteからですが、これはそれほど重要ではありません)。
2 つの double 値を加算して返す関数の場合、コードは次のようになります。cfunc = CFUNCTYPE(c_double, c_double, c_double)(func_ptr)
それは非常にうまく機能しますが、私の関数の引数は型と数が異なる場合があります。Pythonでは、これはいくつかのfor arg in args
ジェネレーターで解決できます。
ただし、自分の型を ctype の型に「変換」または解析する方法はありません (または、少なくとも見つかりませんでした)。
引数はllvmlite-Typeオブジェクトなので、c のような型表現が利用可能です。
私のアプローチは、llvmlite-Type オブジェクト、または c-representation を ctypes の Type オブジェクトにマップできる dict を作成することです。小さなパーサーも役立ちます。
ctype はすでにこのようなものを提供していませんか? 魔法の機能:
ctypes.magic("double") == ctypes.c_double
私は ctypes に縛られていません。CFFI が存在することは知っていますが、経験がなく、ドキュメントを見る限り、単一の関数アドレスの基本的な解決策さえ見つけることができませんでした。
これらのライブラリはどちらも特定の関数のアドレスではなく、ライブラリに関心があるため、私の使用例はかなりまれであることを認識しています。