Am通过使用ctypes引用c ++函数作为python的参数来尝试传递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
我期望得到一个随机大小的数组(在c ++函数中计算),其类型与输出一样长。也就是说,结果向量的大小不是预定义的,否则我可以使用numpy.ndpointers()并定义一个返回类型,并从c返回一个动态分配的数组。
答案 0 :(得分:0)
我通过引用char *引用了c ++,它起作用了:
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>
}