Я использую Swig для интерфейса python с кодом C.Swig и многомерные массивы
Я хочу, чтобы вызвать функцию C, которая принимает для аргумента структуры, содержащей в Int ** вар:
typedef struct
{
(...)
int** my2Darray;
} myStruct;
void myCFunction(myStruct struct);
Я борюсь с многомерными массивами.
Мой код выглядит следующим образом:
В файле интерфейса, я использую CARRAY так:
%include carrays.i
%array_class(int, intArray);
%array_class(intArray, intArrayArray);
В питона, у меня есть:
myStruct = myModule.myStruct()
var = myModule.intArrayArray(28)
for j in range(28):
var1 = myModule.intArray(28)
for i in range(28):
var1[i] = (...) filling var1 (...)
var[j] = var1
myStruct.my2Darray = var
myCFonction(myStruct)
Я получаю ошибку на линии myStruct.my2Darray = var:
TypeError: in method 'maStruct_monTableau2D_set', argument 2 of type 'int **'
Я сомневался в том, что linge% array_class (intArray, intArrayArray) Я попытался использовать typedef для int * для создания моего массива следующим образом: % array_class (myTypeDef, intArrayArray); Но, похоже, это не сработало.
Вы знаете, как обрабатывать многомерные массивы в Swig?
Благодарим за помощь.
'INT ** my2Darray' фактически описывает ни 2D массив, ни указатель на один , Это указатель на массив «int *» и, возможно, на 1D таких. Хотя массивы и указатели тесно связаны в C, они вовсе не одно и то же. У меня нет рекомендации о том, как справиться с этим в Swig, но лучше всего начинать с разумного понимания ваших данных C. –