Problem with embedding AND extending with BOOST
Alexander Gavrilov
agavrilov at home.com
Thu Jun 7 13:21:29 EDT 2001
More information about the Python-list mailing list
Thu Jun 7 13:21:29 EDT 2001
- Previous message (by thread): Problem with embedding AND extending with BOOST
- Next message (by thread): Windows editor?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Your error message makes me think that you have to enable Run-Time Type Information. Go to Project -> Settings... -> C/C++ -> C++ Language and check "Enable Run-Time Type Information (RTTI)" checkbox. Hopefully it'll help. -- Alexander Gavrilov Brainbench MVP for C++ http://www.brainbench.com "Emmanuel Astier" <emmanuel.astier at winwise.fr> wrote in message news:c700d3a2.0106070742.6e225819 at posting.google.com... > Hi, > > I'm quite new to python, and try to extend/embed it (under > Windows/VC6) > > To extend it, I'm using the BOOST python library. > > But I have a problem whenever I want to import a class and use it. > > Here's my code : > > ---------------------------------------------- > main.c : > ---------------------------------------------- > namespace hello { > > class world > { > public: > world(int) {} > ~world() {} > int get() const { return 5; } > }; > > > size_t length(const int& x) { return x;} > } > > #include <boost/python/class_builder.hpp> > > // Python requires an exported function called init<module-name> in > every > // extension module. This is where we build the module contents. > extern "C" > #ifdef _WIN32 > __declspec(dllexport) > #endif > void inithello() > { > try > { > // create an object representing this extension module > boost::python::module_builder hello("hello"); > > // Create the Python type object for our extension class > boost::python::class_builder<hello::world> world_class(hello, > "world"); > > // Add the __init__ function > world_class.def(boost::python::constructor<int>()); > // Add a regular member function > world_class.def(&hello::world::get, "get"); > > // Add a regular function to the module > hello.def(hello::length, "length"); > } > catch(...) > { > boost::python::handle_exception(); // Deal with the exception for > Python > } > } > > > > void main() > { > PyObject* modname, * mod, *func, *mdict; > long Answer; > > Py_Initialize(); > inithello(); > modname = PyString_FromString("Totohello"); > mod = PyImport_Import(modname); > // Initialisation et verification de Python : > if (mod) > { > Answer = 1; > mdict = PyModule_GetDict(mod); > func = PyDict_GetItemString(mdict, "MyFunction"); > if ( func ) > { > Answer = 2; > if ( PyCallable_Check(func) ) > { > PyObject* rslt; > rslt = PyObject_CallFunction(func, "i", 5); > if (rslt) > { > Answer = PyInt_AsLong(rslt); > Py_XDECREF(rslt); > } > else > { > PyErr_Print(); > Answer = 3; > } > } > } > } > printf("Answer : %i", Answer ); > Py_XDECREF ( mod ); > Py_XDECREF(modname); > Py_Finalize(); > } > > ---------------------------------------------- > Totohello.py : > ---------------------------------------------- > def ChangeFov(a): > from hello import * > MyInst = world(2) > #print MyInst.get() <- Crash when uncommented ! > val = length(5) > return 14 + val > > > > The linker report 2 errors, one of those is : > :\dev\boost\boost_1_22_0\boost\python\detail\extension_class.hpp(225) > : warning C4541: 'dynamic_cast' used on polymorphic type 'class > boost::python::detail::instance_holder_base' with /GR-; unpredictable > behavior may result > d:\dev\boost\boost_1_22_0\boost\python\detail\extension_class.hpp(218) > : while compiling class-template member function 'class hello::world > *__cdecl boost::python::python_extension_class_converters<class > hello::world,class boost::python::det > ail::held_instance<class hello::world> >::non_null_from_python(struct > _object *,struct boost::python::type<class hello::world *>)' > > and effectively, it crashes in the "non_null_from_python" function... > > > As someone suceeded in extended AND embedding python using BOOST ? > > Thanks for any help, > > Emmanuel
- Previous message (by thread): Problem with embedding AND extending with BOOST
- Next message (by thread): Windows editor?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list