[C++-sig] problems with typedef void *

Niall Douglas s_sourceforge at nedprod.com
Mon Dec 13 12:03:53 CET 2010


On 12 Dec 2010 at 14:02, Jacob Davis wrote:

> I'm wrapping a C libary with Boost Python and having a really difficult time
> with void * typedefs. For example, here's a typedef and the function header
> that uses it:
> 
> typedef void * EmoEngineEventHandle;
> EmoEngineEventHandle EE_EmoEngineEventCreate();
> [snip]
> There are a *lot* of these functions in the library I'm wrapping that use
> and return void * typedefs. Is there a way to translate the typedefs to get
> all of my function wrappers to pass them properly? Failing that, how do I
> modify my wrappers to support the typedefs?

It's actually easier than you might think.

Firstly I would suggest you look at the thread regarding the patch I 
submitted in 2006 adding void * support to BPL which starts at 
http://mail.python.org/pipermail/cplusplus-sig/2006-
February/009836.html. What my original patch did was to declare a 
trampoline type struct void_ {}; and then cast all void * to void_ *. 
This gave the BPL runtime type registry enough information to work 
with.

(I might add that as this thread showed, Dave scrubbed my trampoline 
type implementation for something better. I know not what, but it may 
be worth your while finding out)

Secondly last time I looked GCCXML nowadays dumps out typedefs, so if 
you feed your C headers to GCCXML you can produce a list of all 
possible typedef names. It's now trivial to modify a Py++ or whatever 
bindings generator to spew out a cast to for example a struct 
EmoEngineEventHandle_ * whenever it sees a EmoEngineEventHandle.

And that ought to do it. Shouldn't take you more than thirty or forty 
hours. And if you integrate all these steps into a build process it 
can all be automated once you've completed it. Also, Roman may or may 
not be interested in adding this feature to Py++.

Hope this helped,
Niall

-- 
Technology & Consulting Services - ned Productions Limited.
http://www.nedproductions.biz/. VAT reg: IE 9708311Q. Company no: 
472909.





More information about the Cplusplus-sig mailing list