使用ctypes从python调用C函数

时间:2014-08-20 14:23:35

标签: python c call wrapper ctypes

我有以下C代码。我试图使用ctypes

从Python调用此函数
int add ( int arr []) 
{
    printf("number %d \n",arr[0]);
    arr[0]=1;
    return arr[0];
}

我使用以下方法编译了这个:

gcc -fpic -c test.c 
gcc -shared -o test.so test.o

然后将其放入/usr/local/lib

Python的调用是:

from ctypes import *

lib = 'test.so'
dll = cdll.LoadLibrary(lib)
IntArray5 = c_int * 5
ia = IntArray5(5, 1, 7, 33, 99)
res = dll.add(ia)
print res

但我总是得到一些像-1365200这样的大号。

我也试过了:

dll.add.argtypes=POINTER(c_type_int)

但它不起作用。

2 个答案:

答案 0 :(得分:1)

尝试围绕这个:

lib = 'test.so'
dll = cdll.LoadLibrary(lib)

dll.add.argtypes=[POINTER(c_int)]
#                ^^^^^^^^^^^^^^^^
#         One argument of type `int *̀

dll.add.restype=c_int
# return type 

res =dll.add((c_int*5)(5,1,7,33,99))
#            ^^^^^^^^^
#       cast to an array of 5 int

print res

使用Python 2.7.3和2.6.9进行测试

答案 1 :(得分:0)

相反,请尝试:

dll = cdll.LoadLibrary('test.so')
res = dll.add(pointer(c_int(5)))
print res