为什么我不能在SERVICE_TABLE_ENTRY中存储lambda函数?

时间:2012-03-01 18:24:46

标签: c++ visual-c++

我正在使用Visual C ++ 11中的lambda。

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 } 
}; 
....
}

我得到的错误信息是:

'type cast':无法转换为'CWin32Service :: RunService ::&lt; lambda_22F3FB7B8C044A64&gt;'到'LPSERVICE_MAIN_FUNCTIONW'

1 个答案:

答案 0 :(得分:1)

这是一个Win32 API,它希望获得具有精确签名的真实函数指针。你不能将lambda或其他类型的函数对象传递给它。

您应该在服务调度表中传递ServiceMain。