#define BOOST_PYTHON_STATIC_MODULE #include #include namespace py = boost::python; struct Message { char const * data () const { return buf; } size_t size () const { return 10; } char buf[10]; }; // error C2027: use of undefined type // 'boost::python::detail::reference_existing_object_requires_a_pointer_or_reference_return_type py::object get_buffer_impl_1 (boost::shared_ptr const & msg) { py::handle<> h ( ::PyBuffer_FromMemory ( const_cast(msg->data ()), msg->size ())); py::object o (h); return o; } // pointer_holder.hpp(176) : error C2535: // 'boost::python::objects::pointer_holder::pointer_holder(Pointer)' : // member function already defined or declared ::PyObject * get_buffer_impl_2 (boost::shared_ptr const & msg) { return ::PyBuffer_FromMemory ( const_cast(msg->data ()), msg->size ()); } void dec_ref (::PyObject * o) { Py_XDECREF (o); } // Same error as the 1st attempt: // error C2027: use of undefined type // 'boost::python::detail::reference_existing_object_requires_a_pointer_or_reference_return_type' boost::shared_ptr< ::PyObject> get_buffer_impl_3 (boost::shared_ptr const & msg) { return boost::shared_ptr< ::PyObject> ( ::PyBuffer_FromMemory ( const_cast(msg->data ()), msg->size ()), dec_ref); } BOOST_PYTHON_MODULE(M) { py::class_ ("Message", py::no_init) .def ("get_buffer_1", &get_buffer_impl_1, py::return_internal_reference<1> ()) .def ("get_buffer_2", &get_buffer_impl_2, py::return_internal_reference<1> ()) .def ("get_buffer_3", &get_buffer_impl_3, py::return_internal_reference<1> ()) ; }