我有一个函数的地址,还有它的" c-like"表示(来自llvmlite,但这并不重要)。
对于一个函数,它将两个double值相加并返回它们,代码如下所示:cfunc = CFUNCTYPE(c_double, c_double, c_double)(func_ptr)
这样可以很好地工作,但是我的函数的参数可以在类型和数量上有所不同。在python中,这可以通过一些for arg in args
生成器解决。
然而,我没有工具(或至少我找不到)如何"转换"或者将我的类型解析为ctype。
参数是llvmlite-Type个对象,所以我有一个类似c的类型表示。
我的方法是创建一个dict,它可以将llvmlite-Type对象或c-representation映射到ctypes的Type对象。一个小解析器也可以提供帮助。
没有ctype提供这样的东西吗?一个神奇的功能:
ctypes.magic("double") == ctypes.c_double
我不受ctypes的约束。我知道CFFI存在,但我有0经验,就我在文档中看,我甚至找不到单个函数地址的基本解决方案。
我知道我的用例相当罕见,因为这两个库都更关注库而不是特定功能的地址。
答案 0 :(得分:0)
好吧,我正在使用一个有各种可能性的词典。因为我可能只会与llvmlite绑定,所以没有那么多选项。
{str(ir.DoubleType()): ct.c_double, ....}