I wanted to provide an instance of a particular object I'm using for Stackless Python state management. I'm trying to take over the green thread management so I can do my own scheduling--but that's only context. In the attached code, I'm trying to do some of life's more simple things. I have the main module, and the scope for that module. With this, I had hoped I could embed an actual instance of an object. From there I anticipate calling it from Python without having to import or do anything else. I figured I'd take the main script scope, add an object called "runtime", and set it to the one in my C++ runtime.
It compiles fine but blows up during runtime with the ever-descriptive "error_already_set()" without a message. This problem only seems to touch the Boost part of the runtime so I don't think that's an issue. I'm using Stackless Python 2.6.5, with Boost 1.49, on Windows Vista with Visual Studio 2010. I had as my inspiration this: http://wiki.python.org/moin/boost.python/HowTo#module_level_objects Which doesn't look to be current. I can't figure out how to use the run-time example there, in particular. It looks like calling interpreter() is not supported, or I have no idea how to make it happen. I'm doing something like this: EmbeddedSynchronization embeddedSync; // A class member up above ... [Did the PyInitialize] boost::python::handle<> mainHandle(boost::python::borrowed(PyImport_AddModule("__main__"))); boost::python::object mainModule(mainHandle); boost::python::scope mainScope(mainModule); boost::python::object class_oClassSync = boost::python::class_<EmbeddedSynchronization, boost::noncopyable>("EmbeddedSynchronization") .def("nap", &EmbeddedSynchronization::beNice) .staticmethod("nap"); mainScope().attr("runtime") = embeddedSync; // Dead right here Stack trace going down in there: > StacklessEmbedding.exe!boost::python::throw_error_already_set() Line 62 C++ StacklessEmbedding.exe!boost::python::expect_non_null<_object>(_object * x) Line 46 C++ StacklessEmbedding.exe!boost::python::converter::detail::return_object_manager_from_python<boost::python::api::object>::operator()(_object * obj) Line 156 + 0x9 bytes C++ StacklessEmbedding.exe!boost::python::call<boost::python::api::object>(_object * callable, boost::type<boost::python::api::object> * __formal) Line 76 + 0x10 bytes C++ StacklessEmbedding.exe!boost::python::api::object_operators<boost::python::api::object>::operator()() Line 54 + 0x14 bytes C++ Anything obviously wrong?
_______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig