Ctypes中的TA-Lib,帮助调用函数

时间:2012-01-29 02:51:09

标签: python c ctypes

所以在过去的三天里,我一直在试图让TA-Lib与python一起工作。这是我编译成dylib(.so的mac版本)的源代码,并且已经从python脚本调用它,编码如下:

from ctypes import *
import numpy

c_float_p = POINTER(c_float)
data = numpy.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])
data = data.astype(numpy.float32)
data_p = data.ctypes.data_as(c_float_p)


dylib = CDLL('libta_lib.dylib')


value = dylib.TA_S_SMA(c_int(0), c_int(data.size - 1), data_p, 0, 19, data_p)

无论数组值是什么,打印值都返回2。我无法从0或1更改TA_S_SMA的第四个参数,否则我得到一个python 138错误,然后是python崩溃。任何人都可以向我解释调用此函数的正确方法吗?我的C技能有限(读0)。

有用的链接:

谢谢!

2 个答案:

答案 0 :(得分:0)

几个星期前我遇到了同样的问题,我找到了instructions。现在他们没有使用ctypes,但在我看来它更好用。 SWIG将为您完成所有包装。有几点需要注意。当您到达Single: Multi:部分时,如果您不知道哪个部分,请从Multi开始,如果不起作用则转到单个部分。再过一点,你会发现他正在将Python 2.3替换为Python 2.6。我使用的是python 2.7,只是将2.7替换为2.7并且它有效。我不确定这是否适用于更高版本的python,但如果你正在使用它,那么值得一试。希望它有所帮助。

答案 1 :(得分:0)

您应该看一下这个TA-Lib Python项目。

它使用Cython来包装TA-Lib,并且是跨平台的,易于安装,并且比SWIG绑定更快。