On 12/12/2010 04:02 PM, Jacob Davis wrote:
Howdy!

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();

And my undoubtedly overly simplistic wrapper for the function:

def("EE_EmoEngineEventCreate", EE_EmoEngineEventCreate);

The compiler complains with lots of similar messages:

1>C:\boost_1_45_0\boost/python/detail/caller.hpp(223) : error C2027: use of undefined type 'boost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning<T>'

There are a couple of issues with your approach. Note that the line above is a trick to pass a message through a (very noisy) compiler error. The "specify_a_return_value_policy..." piece above is telling you that you can't wrap a function returning a void pointer without explicitly telling boost.python what to do with the pointer. Normally it would attempt to pass by-value, but that obviously doesn't work (you can't dereference a void pointer !). But, if you want to pass by-reference, how should the pointer be treated ? Who owns the data ?

More importantly, you don't use a strong type system in your API, since "types" are aliasing void pointers. Thus, the compiler can't help you distinguish e.g. function overloads, and there is no way to auto-generate a type registry.

You may wrap your API with a C++ wrapper, though I honestly doubt this is practical. In fact, I'm in doubt that boost.python is the right choice for your Python wrapping effort. Have you considered alternatives ?

    Stefan

--

      ...ich hab' noch einen Koffer in Berlin...

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

Reply via email to