Re: [C++-sig] Insert instance..... again - solved
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
participants (1)
-
Beau Sapach