Я пытаюсь передать пустой вектор типа long по ссылке на функцию c ++ в качестве аргумента от python с использованием ctypes.
Я использую компилятор python3 и c ++ 11.Я попытался передать указатель ctypes.c_void_p, но он дает неправильный результат.
test.cpp
extern "C" {
int pke_decrypt(char *a,char *b,vector<long> &v)
{do something;
assign v;
}}
test.py
_p=ctypes.CDLL('/home/electrical/Downloads/src/libpke.so')
_p.pke_decrypt.argtypes = [ctypes.c_char_p,ctypes.c_char_p,ctypes.POINTER(ctypes.c_void_p))]
def decrypt(input1,input2):
global _p
v=ctypes.c_void_p()
print (v)
result=_p.pke_decrypt(input1.encode('utf-8'),input2.encode('utf-8'),ctypes.byref(v))
print (v)
return
I'mamожидая получить массив произвольного размера (который вычисляется в функции c ++) типа long в качестве вывода.То есть размер результирующего вектора не предопределен, иначе я мог бы использовать numpy.ndpointers () и определить тип возвращаемого значения и вернуть динамически распределенный массив из c.