Hello, I'm new to Boost::Python and am encountering a problem that seem to be quite common: I need to expose a class to C++ whose constructor takes a wchar_t* as a parameter. The problem is that there is no default type converter from wchar_t to python and vice-versa.
I wanted to know if there was a standard way of doing this. Or if anyone could point me to an implementation of this type conversion. So far I'm doing this (based on the faq): struct wchar_t_to_python_str { static PyObject* convert(wchar_t* const& w) { string s = ""; wchar_t* w2 = w; while(*w2++ != 0){ s += *w2; } return boost::python::incref(boost::python::object(s).ptr()); } }; struct wchar_t_from_python_str { wchar_t_from_python_str() { boost::python::converter::registry::push_back( &convertible, &construct, boost::python::type_id<wchar_t>()); } static void* convertible(PyObject* obj_ptr) { if (!PyString_Check(obj_ptr)) return 0; return obj_ptr; } static void construct( PyObject* obj_ptr, boost::python::converter::rvalue_from_python_stage1_data* data) { const char* value = PyString_AsString(obj_ptr); Py_ssize_t l = PyString_Size(obj_ptr); if (value == 0) boost::python::throw_error_already_set(); void* storage = ( (boost::python::converter::rvalue_from_python_storage<wchar_t*>*) data)->storage.bytes; wchar_t* w = new wchar_t[l]; for(int i=0;i<l;i++){ w[i] = value[i]; } data->convertible = w; } }; void init_module() { to_python_converter<wchar_t*,wchar_t_to_python_str>(); wchar_t_from_python_str(); } BOOST_PYTHON_MODULE(queryparser){ init_module(); } But it doesn't seem to be working. It compiles, but python doesn't understand the conversion. Any thoughts? Thanks in advance! -- Nicolas Lara Linux user #380134 http://nicolas-lara.blogspot.com/ Public key id: 0x152e7713 at http://subkeys.pgp.net/ _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig