
I'm trying to pass a member function pointer around to the Windows Service Control Manager through Windpws API functions, but I think I'm having troubles with the __stdcall convention. I'm using MSVC 7.1.3088. For brevity I've left out information, but I think this is enough to go on: __ExampleClass.h__ class ExampleClass { protected: void Setup( void ); void __stdcall ServiceMain( DWORD dwArgc, LPSTR *lpszArgv ); LPSERVICE_MAIN_FUNCTION m_fServiceMain; }; __ExampleClass.cpp__ void ExampleClass::Setup( void ) { boost::function<void ( DWORD, LPSTR * )> f2 = boost::bind( boost::mem_fn( &ExampleClass::ServiceMain ), this, _1, _2 ); m_fServiceMain = f2.target<void ( DWORD, LPSTR * )>( ); SERVICE_TABLE_ENTRY dispatchTable[ ] = { { const_cast<char *>( g_sAPP_NAME.c_str( ) ), m_fServiceMain }, { 0, 0 } }; StartServiceCtrlDispatcher( dispatchTable ); } void __stdcall ExampleClass::ServiceMain( DWORD dwArgc, LPSTR *lpszArgv ) { } The error I receive concerns the line m_fServiceMain = f2.target<void ( DWORD, LPSTR * )>( ); error C2440: '=' : cannot convert from 'void (__cdecl *)(DWORD,LPSTR * )' to 'LPSERVICE_MAIN_FUNCTIONA' This conversion requires a reinterpret_cast, a C-style cast or function-style cast LPSERVICE_MAIN_FUNCTIONA is defined in "winsvc.h" and is: typedef VOID (WINAPI *LPSERVICE_MAIN_FUNCTIONA)( DWORD dwNumServicesArgs, LPSTR *lpServiceArgVectors ); Any help or insight would be much appreciated. -Jason