Ctypes:来自C-definition的DataTypes

时间:2017-03-13 14:43:31

标签: python python-3.x ctypes python-cffi llvmlite

我有一个函数的地址,还有它的" 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经验,就我在文档中看,我甚至找不到单个函数地址的基本解决方案。

我知道我的用例相当罕见,因为这两个库都更关注库而不是特定功能的地址。

1 个答案:

答案 0 :(得分:0)

好吧,我正在使用一个有各种可能性的词典。因为我可能只会与llvmlite绑定,所以没有那么多选项。 {str(ir.DoubleType()): ct.c_double, ....}