在使用ctypes
库调用c++函数时,若要返回数组,可以通过restype
来指定,使用示例如下所示:
C++示例代码:
extern "C" {
bool* odd_func(int arr[], int n){
bool* odds = new bool[n];
for(int i=0;i<n;i++){
odds[i] = arr[i] % 2;
}
return odds;
}
}
编译命令:
g++ -fPIC -shared test.cpp -o test.so
python使用示例:
import ctypes
lib = ctypes.CDLL("./test.so")
odd_fun = lib.odd_func
n = 5
arr = (ctypes.c_int * n)()
arr[:] = [1, 13, 4, 9, 6]
odd_fun.restype = ctypes.POINTER(ctypes.c_bool * n)
res = [i for i in odd_fun(arr, n).contents]
print(res)
# [True, True, False, True, False]