|
Boost Users : |
From: Li, PingShan \(Kansas City\) (pingshan.li_at_[hidden])
Date: 2007-05-07 13:21:54
I have a question related to setting a C++ member function as a callback function for C library's API.
I searched the boost mailing list and Google, but I could not find a clear answer.
The function I need to call is OpenSSL's CRYPTO_set_id_callback function. It accepts a function
pointer as its parameter.
The following code works fine:
unsigned long IdCallBack( )
{
return ( ( unsigned long )GetCurrentThreadId( ) );
}
CRYPTO_set_id_callback( (unsigned long (*)())IdCallBack );
I have a C++ class and I want to set the call back function to be the member function of my class, I
tried to use boost::bind:
class Test
{
public:
Test( unsigned long a ) : m_long( a )
{
}
virtual ~Test( )
{
}
unsigned long GetId()
{
return m_long;
}
void SetCallBack()
{
CRYPTO_set_id_callback( boost::bind( &Test::GetId, this ) );
}
private:
unsigned long m_long;
};
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
Is it possible to use boost::bind to bind a C++ member function as a callback function for C
interface?
Thank you
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