我正在使用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'
答案 0 :(得分:1)
这是一个Win32 API,它希望获得具有精确签名的真实函数指针。你不能将lambda或其他类型的函数对象传递给它。
您应该在服务调度表中传递ServiceMain。