[EMAIL PROTECTED] writes: > Hello, > > I'm trying to embedd and extend a C++ application. > > I was not able to find any good examples of how to do this.
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/boost/boost/libs/python/test/embedding.cpp > From the small tidbits of information I found, plus browsing the > Boost.Python sources, I tried the following approach (starting from > the "getting_started2" example, with an added main() + other > functions): > > use bjam -omylog.txt -n -sTOOLS=msvc > > To get a log of what exactly goes on when bjam builds the examples. Looking > at the log it seems we have to make som modifications: > > Compile step: > remove -DBOOST_DYNAMIC_LIB Has no effect. > Link step: > remove /DLL > change /out: (file extension should be .exe instead of .pyd) > remove /implib:* (no need for an import lib for an .exe) > > Using these modifications to the command lines we can compile and link an > application. You might try adding -DBOOST_PYTHON_STATIC_LIB if you insist on linking Booost.Python directly into your application, but there's no reason you can't just use the Boost.Python DLL for this job. > It seems to work fine. I manually call the init function (whatever > init##name() expands to in the BOOST_PYTHON_MODULE macro) sometime after > Py_Initialize() init##name(). I can then instatiate objects of classes > defined in C++ in my embedded python script. (There must be a better way to > initialize the module??). I also suspect the application is now exporting > functions and interfaces, but I'm not too worried about that right now. > > I would also like to have access to _instances_ of C++ objects. Ie. the > object has already been instantiated in C++, and contains state. I would > like to use this object in an embedded script. > > Are there anyone with ideas, pointers, or examples showing how this can be > done? If you know the lifetime of the C++ object will persist past its use in Python, you can pass it to some Python callable object with ref(): void pass_to_python(object func, SomeCppClass& x) { // Invoke func with a Python object built around x func(boost::ref(x)); } HTH, -- David Abrahams [EMAIL PROTECTED] * http://www.boost-consulting.com Boost support, enhancements, training, and commercial distribution _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost