Как вернуть массив из dll библиотеки на c++ в python, используя ctypes?

Рейтинг: 0Ответов: 0Опубликовано: 04.06.2023

Не понимаю как вернуть массив из функции в dll библиотеки.

Код:

python:

from ctypes import *

lib = CDLL('./lib_cpp.dll')

arr1 = c_int * 3
new_arr = c_int * 3

size = c_int(3)
t_arr1 = arr1(1, 2, 3)

t_new_arr = new_arr(lib.test_ret(t_arr1, size))

print(t_new_arr)  # <__main__.c_long_Array_3 object at 0x000002881F89AE40>
print(t_new_arr[0])  # random number
print(t_new_arr[1])  # 0
print(t_new_arr[2])  # 0

c++ Header.h:

#define MULT_ARRAY_LIB __declspec(dllexport)

extern "C" MULT_ARRAY_LIB int* mult_arr(int[], int[], int);
extern "C" MULT_ARRAY_LIB int* test_ret(int[], int size);

c++ Source.cpp:

#define MULT_ARRAY_LIB __declspec(dllexport)

extern "C" MULT_ARRAY_LIB int* mult_arr(int arr1[], int arr2[], int size) {
    int* new_arr(new int[5]);
    for (int i = 0; i != size; i++) {
        new_arr[i] = arr1[i] * arr2[i];
    }
    return new_arr;
}

extern "C" MULT_ARRAY_LIB int* test_ret(int arr[], int size)
{
    for (int i = 0; i != size; i++) {
        arr[i] += 2;
    }
    return arr;
}

Ответы

Ответов пока нет.