Смысл функции в том, чтобы передать размер массива в dll, откуда будет выведен массив передаваемого размера. Массивы изначально рассчитываются в dll. Задача - передать все массивы из dll в python. Но не совсем выходит. Подскажите как сделать верно?
Код Python
def foo (a1): #Функция, что вызывает функцию из dll с++
f1.сFoo.restype = POINTER(c_float)
result = POINTER(c_float)
result = f1.сArray(a1)
return result
r = foo(a1) #a1 - размер массива, который ранее я получаю из того же dll файла
Код в header.h для dll
typedef struct size {
x1; //переменная в которую я записываю размер массива, а позже передаю его в py
};
typedef struct data2 {
float arr[];
};
extern "C" __declspec(dllexport) void .... //просто объявление функций для расчёта
Основной код с расчётами (что к сути вопроса не относятся) на c++ в dll
extern "C" {
__declspec(dllexport) float* сArray(int size, arr2* data2_arr) //да, в py я передаю одно значение размера, а тут ещё и структура. Но структуру из py мне не нужно передавать. Нужно просто взять из объявленной тут структуры массив и вывести его. Можно ли как то иначе объявить структуру? Учтём, что запись в неё массива ведётся из другой функции
{
float* array = new float[size]();
for (int i = 1; i <= size; i++)
{
array[i] = data2_arr->arr[i];
}
return array;
}
}
__declspec(dllexport) void cFoo2(/*иные расчётные переменные*/ size* data2_size, data2* data2_arr)
{
//множество расчётов
data2_size->size = x.size(); //записываю размер вектора x, который и передаётся в py через структуру
copy(x.begin(), x.end(), data2_arr->arr); //копирую вектор x в массив arr. На всякий уточню, я проверял, он копируется верно.
}
Если вызвать функцию cArray из c++ файла с указанием размера и структуры, то всё срабатывает, но мне нужно вывести и записать её не в c++, а вывести из dll в py-файл.