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

emmanuel.rivoire at gmail.com emmanuel.rivoire at gmail.com
Sat Aug 16 06:38:26 EDT 2008


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