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