我有以下C代码。我试图使用ctypes
:
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)
但它不起作用。
答案 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