How to access an Array and a struct within a struct wrapped by Swig ?

Anish Chapagain anishchapagain at gmail.com
Sat Aug 16 14:05:52 EDT 2008


Hi,
If you have struct defined in .h file then it's ok or can dea easyily
with struct written with .i file,
in .h file,
     struct def
            {
             int a;
            char name[10];
            };
can be referenced as
                              >>strvar=new_def() //now strvar is your
object for struct def
                              and can access a and name as, get and
set for individual member see,
                             >>def_a_set(strvar,10)
                             >>def_a_get(strvar) will return 10.
or you can define struct as,

typedef struct
{
int sage;
}coll;
within .h file and access similarly.

regard's
Anish Chapagain
www.mysticnepal.com

On Aug 16, 11:38 am, emmanuel.rivo... at gmail.com wrote:
> Hello,
>
> I spent almost a week to be able to embed Python within my C++ game
> engine.
> I wrote a mini-tutorial of what I was able to do so far here :http://forums.indiegamer.com/showpost.php?p=169352&postcount=9
>
> At the end of my tutorial, I wrote : "You can do the same with C++
> classes, and with structures within structures. Swig can parse & wrap
> most C/C++ declarations."
>
> Gloups, I was so wrong..! :-S
>
> It seems that I can read a struct within my struct, but I cannot write
> values to it.
> Also, I cannot access the array from within my struct.
>
> Any help to achieve this would be very welcome.
>
> Here the problem in detail :
> I'm using Python 2.5.2 & Swig 1.3.36.
>
> The structures :
> struct SIn
> {
>         int in1, in2;
>
> };
>
> struct SPythoned
> {
>         SIn Inner;
>         float Skill[16];
>
> };
>
> The python code :
> =======================
> def TestObject(o):
>         print(type(o))
>         print(type(o.Skill))
>         print(o.Skill)
>         print(type(o.Inner))
>         print(type(o.Inner.in1))
>         print(o.Inner.in1)
>         print(o.Inner.in2)
>
>         o.Inner.in1 = 12
>         o.Inner.in2 = 17
>
>         print(o.Inner.in1)
>         print(o.Inner.in2)
> =======================
>
> It gives me this output :
> =======================
> <class 'TE2008.SPythoned'>
> <type 'PySwigObject'>
> _20fd1300_p_float
> <class 'TE2008.SIn'>
> <type 'int'>
> 2
> 22
> 2
> 22
> =======================
>
> So althought I can read the value, the "o.Inner.inX = Y" are without
> effect..! (and checking the value in the object in the C part confirms
> this).
>
> Moreover, if I add these lines :
>         for i in range(16) :
>                 print(o.Skill[i])
>
> I get this error :
> Traceback (most recent call last):
>   File "d:\TE 2008\PyTest.py", line 32, in TestObject
>     print(o.Skill[i])
> TypeError: 'PySwigObject' object is unsubscriptable
>
> Any idea how to make this work ..?

---------------



More information about the Python-list mailing list