0

我有一个函数的地址以及它的“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,而且就我在文档中的查看而言,我什至找不到单个函数地址的基本解决方案。

我知道我的用例很少见,因为这两个库都更关心库而不是特定函数的地址。

4

1 回答 1

0

好的,我只是使用具有所有可能性的字典。因为我可能只会绑定到 llvmlite,所以没有那么多选择。 {str(ir.DoubleType()): ct.c_double, ....}

于 2017-03-13T17:55:22.527 回答