On 30 Dec 2008, at 16:28, William Newbery wrote:

> You can start with the python object and then get the C++ object that implements it:

> ExtensionObject<MyClass> obj( args[0] ); // exception thrown 
> if wrong type
> MyClass *p = obj.extensionObject(); // get C++ pointer

Ok, so basicly I just pass the ExtensionObject<T> around, and can use th extensionObject() method to get a pointer to the c++ object.

One thing I cant work out though, what do I construct the ExtensionObject class with if I have not yet created an object to store in it?
I need to have the Py::ExtensionObject<Input> input in the D3D classes deffinition, but I cant actauly create an Input instance untill later in the constructor

class D3d : public Py::PythonExtension<D3d>
    Py::ExtensionObject<Input> input;

{//error C2512: 'Py::ExtensionObject<T>' : no appropriate default constructor available
...create window and dx stuff
    input = new Input(this, hwnd);//cant create the Input instance untill after some other stuff is created

In cases like this I use a pointer:

 Py::ExtensionObject<Input> *input_ptr;

and new a Py::ExtensionObject<Input>( input ) when I have it available.

You need to create the the Py::Object to pass it back to python like this:

Py::ExtensionObject<Input> an_input_object( Py::asObject( new Input(this, hwnd) ) ) );

I've been looking at allowing Py::Object to hold NULL for V6.0.0 - but that targeted at Python 3.0.