Почему я не могу сохранить лямбда-функцию в SERVICE_TABLE_ENTRY? - PullRequest
0 голосов
/ 01 марта 2012

Я играю с лямбдой в Visual C ++ 11.

void CWin32Service::RunService (__in  DWORD dwArgc, __in  LPTSTR *lpszArgv)
{

auto SvcMainptr = [this](__in  DWORD dwArgc, __in  LPTSTR *lpszArgv) -> void    {ServiceMain(  dwArgc, lpszArgv );} ;


SERVICE_TABLE_ENTRY DispatchTable[] = 
{ 
    { m_ServiceName, (LPSERVICE_MAIN_FUNCTION)SvcMainptr }, <<== Error HERE 
    { NULL, NULL } 
}; 
....
}

Полученное сообщение об ошибке:

«приведение типа»: невозможно преобразовать из «CWin32Service :: RunService ::»'to' LPSERVICE_MAIN_FUNCTIONW '

1 Ответ

1 голос
/ 01 марта 2012

Это Win32 API, который ожидает получения реального указателя на функцию с точной подписью. Вы не можете передать ему лямбда или другой тип функционального объекта.

Вы должны передать ServiceMain в таблицу отправки услуг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...