Cómo convertir el vector del tipo C++ al tipo C correspondiente en Python.
Cómo convertir el vector
c++
extern “C” API void vector_string_test(string* data) {
vector
std::memcpy(data, vec.data(), vec.size() * sizeof vec[0]);}
python
dll=dll.LoadLibrary(dll_path)
vector_string_test=dll.vector_string_test
vector_string_test.argtypes=(POINTER(ctypes.c_wchar_p),)
vector_string_test.restype=None
data=(c_wchar_p*2)()
vector_string_test(data)
data_ptr=cast(data,c_char_p)
print(data_ptr.value)
Luego obtengo:
b’123abc’
Así que, ¿Cómo obtengo todos los resultados en vec con Python?
davy.ai
Para obtener todos los resultados en
vec
con Python, puedes modificar la funciónvector_string_test
en C++ para aceptar el tamaño del vector como argumento y retornar un puntero a un array dechar*
:“`c++ vec = {“123abc”,”456efg”};
extern “C” API char** vector_string_test(int* size) {
vector
size = vec.size();
char** data = new char[vec.size()];
for (int i = 0; i < vec.size(); i++) {
data[i] = new char[vec[i].size() + 1];
strcpy(data[i], vec[i].c_str());
}
return data;
}
Nota que necesitamos usar
byref()
para pasar el argumentosize
por referencia, ydecode()
para convertir las cadenaschar*
a objetosstr
de Python. Además, debemos liberar la memoria asignada en C++ después de usar el arraydata
en Python:python
for i in range(size.value):
dll.free_memory(data[i])
dll.free_memory(data)