SWIG, Python and C structures

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • RocketIII

    #1

    SWIG, Python and C structures

    Hi,

    I have structures like the following:

    typedef struct _SX
    {
    int i;
    char str[10];
    } SX;

    typedef struct _SXA
    {
    int num_elements;
    SX sa[10];
    } SXA;

    void myfunc1( SX *sx_p );
    void myfunc2( SXA *sxa_p );

    The swig interface file simply includes the .h-file with the '%include'
    statement.

    I'm having problems when sending elements of SX within the SXA as an
    argument to myfunc2!

    The Python codes is like following:
    ....
    sx1 = pymod.SX()
    sx1.i = 1
    sx1.str = "string1"
    sx2 = pymod.SX()
    sx2.i = 2
    sx2.str = "string2"

    sxl = []
    sxl.append( sx1 )
    sxl.append( sx2 )

    sxa = pymod.SXA()
    sxa.num_element s = len(sxl)
    sxa.sa = sxl # <-triggers the
    following error

    Traceback (most recent call last):
    File "pymod_test.py" , line 34, in ?
    test()
    File "pymod_test.py" , line 31, in test
    test2()
    File "pymod_test.py" , line 25, in test2
    sxa.sa = sxl
    File "/home/user/utv/misc/pymods/pymod.py", line 70, in <lambda>
    __setattr__ = lambda self, name, value: _swig_setattr(s elf, SXA,
    name, value)
    File "/home/user/utv/misc/pymods/pymod.py", line 22, in _swig_setattr
    return _swig_setattr_n ondynamic(self, class_type,name ,value,0)
    File "/home/user/utv/misc/pymods/pymod.py", line 15, in
    _swig_setattr_n ondynamic
    if method: return method(self,val ue)
    TypeError: argument number 2: a 'SX *' is expected, 'list([<pymod.SX;
    proxy of C SX instance at _a0211708_p__SX >, <pymod.SX; proxy of C SX
    instance at _70b21408_p__SX >])' is received

    I've tried to add a %typemap (in) SX { ... } without any success.

    The following assignment with call to myfunc2 works though.
    sxa.sa = sx1

    Can anyone please advise

    Regards
    - Ingi

Working...