我有一个函数的地址以及它的“c-like”表示(来自llvmlite,但这并不重要)。
对于将两个双精度值相加并返回它们的函数,代码如下所示:cfunc = CFUNCTYPE(c_double, c_double, c_double)(func_ptr)
这会很好,但是我的函数的参数可以在类型和数量上有所不同。在 python 中,这可以通过一些for arg in args
生成器来解决。
但是我没有工具(或者至少我没有找到)如何将我的类型“转换”或解析为 ctype 的工具。
参数是llvmlite-Type对象,所以我有一个类似 c 的类型表示可用。
我的方法是创建一个 dict,它可以将 llvmlite-Type 对象或 c 表示映射到 ctypes 的 Type 对象。一个小解析器也可以提供帮助。
ctype 不是已经提供了这样的东西吗?一个神奇的功能:
ctypes.magic("double") == ctypes.c_double
我不受ctypes的约束。我知道 CFFI 存在,但是我对它的经验为 0,而且就我在文档中的查看而言,我什至找不到单个函数地址的基本解决方案。
我知道我的用例很少见,因为这两个库都更关心库而不是特定函数的地址。