使用 python ctypes 通过引用 c++ 函数传递长向量

using python ctypes pass a long vector by reference to a c++ function

我正在尝试通过引用 c++ 函数作为参数从 python 使用 ctypes 传递一个 long 类型的空向量。

我正在使用 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

我希望得到一个 long 类型的随机大小数组(在 c++ 函数中计算)作为输出。也就是说,结果向量的大小不是预定义的,否则我可以使用 numpy.ndpointers() 并定义一个 return 类型,然后 return 从 c 中编辑一个动态分配的数组。

我通过引用 c++ 传递了 char*,它起作用了:

test.py

_pqc=ctypes.CDLL('/home/electrical/Downloads/src/libpke.so')
_pqc.pke_decrypt.argtypes = [ctypes.c_char_p,ctypes.c_char_p,ctypes.POINTER(ctypes.c_char_p)]
 def pke_decrypt(input1,input2):
     global _p
     v=ctypes.c_char_p()    
     result=_pqc.pke_decrypt(input1.encode('utf-8'),input2.encode('utf-8'),ctypes.byref(v))
     print((v.value).decode("utf-8"))
     return

test.cpp

int pke_decrypt(char *input1,char *input2,char* &vout){
   Internal conversion from char* to vector<long> 
}