【发布时间】:2019-06-13 11:08:34
【问题描述】:
我试图通过引用一个 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() 并定义一个返回类型并从 c 返回一个动态分配的数组。
【问题讨论】:
-
请注意,它是 c 类型而不是 c++ 类型。
-
它也适用于 c++
-
根据您的回答,它没有OOTB。您必须做一个额外的步骤(在 test.cpp 中将其转换为 C 类型)。
标签: c++11 vector pass-by-reference ctypes long-integer