Well, I have embedded an interpreter inside C++ code, if your question is related to that, please write back. May be I can help you with that. cheers, Raghav
On Tue, Sep 24, 2013 at 4:33 PM, Giuseppe Corbelli < giuseppe.corbe...@copanitalia.com> wrote: > On 21/09/2013 16:52, Kassiopi Kassiopi2 wrote: > >> Hi, >> >> I want to call a c++ function from an embedded python shell, using boost >> python. All the examples I've seen online describe how to expose a whole >> class >> or some functions, but all cases refer to *standalone* parts of code. >> >> My case is different though. The function I want to expose is not >> standalone, >> and has a dependency: >> >> ------- start of documentModule.cpp -------- >> #include <commandManager.hpp> >> #include <boost/python.hpp> >> >> void newDocument( bool makeActive ) { >> // depends on commandManager here >> GetCommandMananager()->**submitCommand( new newDocumentCmd( >> makeActive ) ); >> } >> >> BOOST_PYTHON(documentModule) { >> using namespace boost::python; >> def( "newDocument", myCadLib::pythonCommands::**newDocument, >> arg("makeActive") ); >> } >> ------- end of documentModule.cpp -------- >> >> In reality the situation is more complicated and there are more >> dependencies >> than the one mentioned above. >> After generating a .so file with distutils, when I start my application >> and I >> attempt to load the module (.so file) in the embedded python shell I get >> an >> undefined symbols error complaining about the commandManager class. >> Of course this is a reasonable request from python and I understand that. >> However, I don't really care to generate a standalone python module per >> se. I >> just want it to work in my application's embedded python shell. >> Additionally, >> it wouldn't be meaningful to have the commandManager class exposed as >> well, >> since this is part of my applications internal structure. >> > > Seems to me you want both extending and embedding. Never embedded an > interpreter in a C++ app, so I'm not of much use here. > The two jobs should be fairly independent. Producing the .so to extend the > interpreter needs to link the commandManager library. > Your extension module needs to access the Command Manager, so make sure it > has already been initialized before the module is loaded, else the > GetCommandManager() may return NULL. > > -- > Giuseppe Corbelli > WASP Software Engineer, Copan Italia S.p.A > Phone: +390303666318 Fax: +390302659932 > E-mail: giuseppe.corbelli@copanitalia.**com<giuseppe.corbe...@copanitalia.com> > > ______________________________**_________________ > Cplusplus-sig mailing list > Cplusplus-sig@python.org > https://mail.python.org/**mailman/listinfo/cplusplus-sig<https://mail.python.org/mailman/listinfo/cplusplus-sig> >
_______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org https://mail.python.org/mailman/listinfo/cplusplus-sig