Bonjour,
J'utilise Swig pour interfacer mon python avec du code C.
Je veux appeler une fonction C qui prend en argument une struct contenant un int** var:
J'ai parcouru la doc Swig un peu dans tous les sens mais je dois dire que je bloque sur le concept des tableaux à plusieurs dimensions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 typedef struct { (...) int** monTableau2D; } maStruct; void maFonctionC( maStruct struct );
Pour l'instant mon code ressemble à cela:
Dans le fichier d'interface, j'utilise carray de la sorte:
Après dans le python, je fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 %include carrays.i %array_class( int, intArray ); %array_class( intArray, intArrayArray );
J'obtiens alors l'erreur suivante sur la ligne maStruct.monTableau2D = var:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 maStruct = monModule.maStruct() var = monModule.intArrayArray(28) for j in range(28): var1 = monModule.intArray(28) for i in range(28): var1[i] = (...) remplissage de var1 (...) var[j] = var1 maStruct.monTableau2D = var maFonctionC( maStruct )
Pensant que la ligne %array_class( intArray, intArrayArray ); ne devait pas être gérée correctement, j'ai eu l'idée de passer par un typedef de int* pour pouvoir créer mon tableau de int* de la sorte: %array_class( monTypeDef, intArrayArray );. Mais cela ne semble pas fonctionner non plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part TypeError: in method 'maStruct_monTableau2D_set', argument 2 of type 'int **'
Avez-vous la solution pour affecter correctement un tableau à plusieurs dimensions ?
Merci par avance pour votre aide,
@+
Partager