// StacklessPythonCppInterop.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include "TimeBomb.hpp" using namespace boost; using namespace boost::python; BOOST_PYTHON_MODULE(kaboom) { class_, boost::noncopyable>("ITimeBombCallback") .def("ReceiveExplosion", pure_virtual(&ITimeBombCallback::ReceiveExplosion)) ; class_("TimeBomb", init()) .def("Go", &TimeBomb::Go) .def("Join", &TimeBomb::Join) ; } int main(int argc, char** argv) { Py_Initialize(); initkaboom(); // Initializes the Boost.Python module I defined. // Load up the auto execution script and then open up the command prompt object main_module((handle<>(borrowed(PyImport_AddModule("__main__"))))); object main_namespace = main_module.attr("__dict__"); try { handle<> ignored(( PyRun_String( "execfile('test_script.py')", Py_file_input, main_namespace.ptr(), main_namespace.ptr() ) )); } catch(...) { // If an exception was thrown, translate it to Python. Sometimes // this even works! // When there are problems with the script up front, I just get // flung to the Python command line. That's on my list of things // to improve... boost::python::handle_exception(); } Py_Main(argc, argv); return 0; }