2017-03-13 29 views
0

我有一個函數的地址,也有它的「c樣」表示(來自llvmlite,但這不是那麼重要)。Ctypes:來自C定義的數據類型

對於一個功能,它增加了兩個雙值並返回它們的代碼是這樣的:cfunc = CFUNCTYPE(c_double, c_double, c_double)(func_ptr)

這會工作得非常好,但是我的函數的參數可以在類型和數量的不同而不同。在python中,這可以通過一些for arg in args生成器來解決。

但是我沒有工具(或者至少我找不到)如何「轉換」或解析我的類型到ctype的類型。

參數是llvmlite-Type對象,所以我有一個c類型的表示可用。


我的方法是創建一個字典,其可以llvmlite型的物體,或與c表示映射到的ctypes的類型的對象。一個小解析器也可以提供幫助。

不ctype提供這樣的東西已經?神奇功能: ctypes.magic("double") == ctypes.c_double

我不會綁定到ctypes。我知道CFFI存在,但是我有0經驗,並且就我看文檔而言,甚至找不到單一功能地址的基本解決方案。

我知道我的用例很少見,因爲這兩個庫都更關心庫而不是特定函數的地址。

回答

0

好吧,我只是用一個字典與所有的可能性。由於我可能只會被綁定到llvmlite,所以沒有那麼多的選擇。 {str(ir.DoubleType()): ct.c_double, ....}