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:
1 2 3 4 5 6 7 8
|
typedef struct
{
(...)
int** monTableau2D;
} maStruct;
void maFonctionC( maStruct struct ); |
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.
Pour l'instant mon code ressemble à cela:
Dans le fichier d'interface, j'utilise carray de la sorte:
1 2 3 4
|
%include carrays.i
%array_class( int, intArray );
%array_class( intArray, intArrayArray ); |
Après dans le python, je fais:
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 ) |
J'obtiens alors l'erreur suivante sur la ligne maStruct.monTableau2D = var:
TypeError: in method 'maStruct_monTableau2D_set', argument 2 of type 'int **'
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.
Avez-vous la solution pour affecter correctement un tableau à plusieurs dimensions ?
Merci par avance pour votre aide,
@+
Partager