我有一個函數的地址,也有它的「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經驗,並且就我看文檔而言,甚至找不到單一功能地址的基本解決方案。
我知道我的用例很少見,因爲這兩個庫都更關心庫而不是特定函數的地址。