[C++-sig] Boost python simple interfacing

Raghvendra Jain raghavendra.jain at gmail.com
Tue Sep 24 10:06:31 CEST 2013


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.corbelli at 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 at copanitalia.**com<giuseppe.corbelli at copanitalia.com>
>
> ______________________________**_________________
> Cplusplus-sig mailing list
> Cplusplus-sig at python.org
> https://mail.python.org/**mailman/listinfo/cplusplus-sig<https://mail.python.org/mailman/listinfo/cplusplus-sig>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20130924/2c7187a3/attachment.html>


More information about the Cplusplus-sig mailing list