Robin Gilks wrote:
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

I've found the pybindgen commit for revision 628 and that fixes the PyObject problem - got a new one now!! I can't work out the syntax to return any sort of pointer for example
   mod.add_method('methodA', ReturnValue.new('uint8_t *'), [])
This is probably me again not understanding the Python side of things - how would I return a string otherwise?


I see that some of the fixes are in the NS-3 project as pybindgen-0.10.0.630 (I assume this means up to and including commit 630) but there is no waf included in this project so I can't build it :-(


Again, any help would be appreciated...

Cheers

--
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