Following on from my expanding embedded code thread, I'm making progress in that if I hack the class instantiation in the wrapper that pybindgen produces I can get it all to work.

With that in mind, I'm trying to use add_function_as_constructor but it won't let me use a 'void *' or 'PyObject *' pointer as a parameter. I have to use 'uint32_t *' and then edit the code!!

My generator code looks like this...

testclass = mod.add_class('testclass')
testclass.add_function_as_constructor('PyCObject_AsVoidPtr', None, [Parameter.new(''PyObject *', 'instance', transfer_ownership = False)])
which results in the traceback of...
Traceback (most recent call last):
 File "testclassgen.py", line 31, in <module>
   my_module_gen(sys.stdout)
 File "testclassgen.py", line 28, in my_module_gen
   mod.generate(FileCodeSink(out_file) )
File "/usr/local/lib/python2.5/site-packages/pybindgen/module.py", line 839, in generate
   self.do_generate(sink_manager, module_file_base_name)
File "/usr/local/lib/python2.5/site-packages/pybindgen/module.py", line 721, in do_generate
   class_.generate(sink, self)
File "/usr/local/lib/python2.5/site-packages/pybindgen/cppclass.py", line 1481, in generate
   have_constructor = self._generate_constructor(code_sink)
File "/usr/local/lib/python2.5/site-packages/pybindgen/cppclass.py", line 1620, in _generate_constructor
   overload.generate(code_sink)
File "/usr/local/lib/python2.5/site-packages/pybindgen/overloading.py", line 183, in generate
   (code_sink,), {}, self.all_wrappers[0])
File "/usr/local/lib/python2.5/site-packages/pybindgen/utils.py", line 124, in call_with_error_handling
   return callback(*args, **kwargs)
File "/usr/local/lib/python2.5/site-packages/pybindgen/cppmethod.py", line 520, in generate
   % self._class.name)
AssertionError: something went wrong with the type handlers; constructors need parameter names, yet no names were given for the class testclass constructor

If I change the 'PyObject *' to a 'void *' I get...Traceback (most recent call last):
 File "testclassgen.py", line 31, in <module>
   my_module_gen(sys.stdout)
 File "testclassgen.py", line 16, in my_module_gen
testclass.add_function_as_constructor('PyCObject_AsVoidPtr', None, [Parameter.new('void *', 'instance', transfer_ownership = False)]) File "/usr/local/lib/python2.5/site-packages/pybindgen/typehandlers/base.py", line 1221, in new
   param_type_matcher.lookup(ctype)
File "/usr/local/lib/python2.5/site-packages/pybindgen/typehandlers/base.py", line 1350, in lookup
   raise TypeLookupError(tried_names)
pybindgen.typehandlers.base.TypeLookupError: ['void *']

but looking at pybindgen-0.10.0/pybindgen/typehandlers/base.py it looks like at least void * should be OK!!

I either still missing something (very likely) or there is a problem here!

--
Robin






=======================================================================
This email, including any attachments, is only for the intended
addressee.  It is subject to copyright, is confidential and may be
the subject of legal or other privilege, none of which is waived or
lost by reason of this transmission.
If the receiver is not the intended addressee, please accept our
apologies, notify us by return, delete all copies and perform no
other act on the email.
Unfortunately, we cannot warrant that the email has not been
altered or corrupted during transmission.
=======================================================================

_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to