Hello everyone,
Boy
I feel sheepish, but I think I’ve found my problem. In my PyTypeObject I had set
tp_basicsize to sizeof(C++_ClassName) instead of the sizeof(Python_struct)
where Python_struct is my
“typedef struct { PyObject_HEAD ...” that wraps the
C++ object. The code I posted below seems to work just fine now.
Beau
From: Beau Sapach
[mailto:beau.sapach@ualberta.ca]
Sent: Tuesday, November 07, 2006 3:47 PM
To: 'Development of Python/C++ integration'
Subject: Insert instance..... again
Hello everyone,
I know it seems like
I’m beating a dead horse here, but I’m not having much luck in understanding
the “proper” way to use some of the C API functions. I want to insert an
instance of one of my own objects into the python environment, here’s what I’ve
got so far.
//get the main
module
PyObject * pMainModule =
PyImport_ImportModule("__main__");
//insert MyType into the main
module
Py_INCREF(MyType);
PyModule_AddObject(pMainModule,"MyObject",(PyObject*)&MyType);
//create an instance of mytype
PyObject * MyInstance = MakeMyObject();
//get the main module’s dictionary
PyObject * pMainDict =
PyModule_GetDict(pMainModule);
//insert my instance into the dictionary under the
name ‘testobject’
PyDict_SetItemString(pMainDict,"testobject",MyInstance);
//run a script that calls some function of my
‘testobject’ instance
PyRun_SimpleString("testobject.function()\n");
My
object implements only a constructor, destructor and one function of its own.
The above code crashes somewhere in the python DLL but appears to be trying to
access something that’s un-initialized. Is there something I’m doing
wrong? The above code works fine when I insert a PyObject integer created
using PyInt_FromLong(). Minus of course the unnecessary PyModule_AddObject().
What’s different about my object? Is there some functionality
missing? Should I be implementing some of the other functions in the
PyTypeObject? Any help would be appreciated!
Beau