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:
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 );
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:

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 );
Après dans le python, je fais:

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 )
J'obtiens alors l'erreur suivante sur la ligne maStruct.monTableau2D = var:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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,
@+