提问人:4am 提问时间:1/19/2019 更新时间:1/21/2019 访问量:593
使用 Python CTYPES 通过引用 C++ 函数传递长向量
using python ctypes pass a long vector by reference to a c++ function
问:
我试图通过引用 c++ 函数将 long 类型的空向量作为使用 ctypes 从 python 传递参数。
我使用 python3 和 c++11 编译器。 我尝试传递ctypes.c_void_p指针,但它给出了错误的结果。
测试 .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赞
4am
1/21/2019
#1
我通过引用 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
测试 .cpp
int pke_decrypt(char *input1,char *input2,char* &vout){
Internal conversion from char* to vector<long>
}
评论