diff --git a/pybindgen/cppattribute.py b/pybindgen/cppattribute.py index 1ece1a1..f830bd0 100644 --- a/pybindgen/cppattribute.py +++ b/pybindgen/cppattribute.py @@ -358,7 +358,7 @@ class PyGetSetDef(object): for name, getter, setter in self.attributes: code_sink.writeln('{') code_sink.indent() - code_sink.writeln('"%s", /* attribute name */' % name) + code_sink.writeln('(char*) "%s", /* attribute name */' % name) ## getter getter_c_name = (getter and getter.c_function_name or "NULL") diff --git a/pybindgen/cppmethod.py b/pybindgen/cppmethod.py index bff7013..e68860b 100644 --- a/pybindgen/cppmethod.py +++ b/pybindgen/cppmethod.py @@ -447,8 +447,11 @@ class CppVirtualMethodProxy(ReverseWrapperBase): def generate_python_call(self): """code to call the python method""" - params = ['m_pyself', '"_%s"' % self.method_name] - params.extend(self.build_params.get_parameters()) + params = ['m_pyself', '(char *) "_%s"' % self.method_name] + build_params = self.build_params.get_parameters() + if build_params[0][0] == '"': + build_params[0] = '(char *) ' + build_params[0] + params.extend(build_params) self.before_call.write_code('py_retval = PyObject_CallMethod(%s);' % (', '.join(params),)) self.before_call.write_error_check('py_retval == NULL') diff --git a/pybindgen/typehandlers/base.py b/pybindgen/typehandlers/base.py index 47e4d6f..f59d638 100644 --- a/pybindgen/typehandlers/base.py +++ b/pybindgen/typehandlers/base.py @@ -730,10 +730,10 @@ class ForwardWrapperBase(object): if keywords is None: keywords = [] keywords_var = self.declarations.declare_variable( - 'char *', 'keywords', + 'const char *', 'keywords', '{' + ', '.join(['"%s"' % kw for kw in keywords] + ['NULL']) + '}', '[]') - param_list = ['args', 'kwargs', params[0], keywords_var] + params[1:] + param_list = ['args', 'kwargs', params[0], '(char **) ' + keywords_var] + params[1:] self.before_parse.write_error_check('!PyArg_ParseTupleAndKeywords(%s)' % (', '.join(param_list),)) self.meth_flags.append("METH_KEYWORDS")