Boost logo

Boost Users :

From: Li, PingShan \(Kansas City\) (pingshan.li_at_[hidden])
Date: 2007-05-08 10:44:06


Changing the OpenSSL API is not an option for me.

Let's assume that the callback function accepts a void* parameter, can you show me an example that I
can bind C++ member function to a C callback function?

Thank you

> I got the following error under VC++ 7.1:
>
> error C2664: 'CRYPTO_set_id_callback' : cannot convert
> parameter 1 from 'boost::_bi::bind_t<R,F,L>' to
> 'unsigned long (__cdecl *)(void)'
> with
> [
> R=unsigned long,
> F=boost::_mfi::mf0<unsigned long,Test>,
> L=boost::_bi::list1<boost::_bi::list_av_1<Test *>::B1>
> ]
> No user-defined-conversion operator available that
> can perform this conversion, or the
> operator cannot be called

It doesn't even take in void *???? Maybe the fact that it doesn't take
in state means something. You should look up that specific callback in
the openssl documentation

> Is it possible to use boost::bind to bind a C++ member
> function as a callback function for C
> interface?

Its easy given that said C interface allows the user to pass in "other
data" a la void *.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net