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 f2 = boost::bind( boost::mem_fn( &ExampleClass::ServiceMain
), this, _1, _2 );
m_fServiceMain = f2.target( );
SERVICE_TABLE_ENTRY dispatchTable[ ] =
{
{ const_cast( 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( );
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