2012-03-01 36 views
-1

我與拉姆達打在Visual C++ 11爲什麼我不能在SERVICE_TABLE_ENTRY中存儲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 } 
}; 
.... 
} 

該錯誤消息我得到的是:

'類型轉換':不能從轉換 'CWin32Service :: RunService :: < lambda_22F3FB7B8C044A64>' 來'LPSERVICE_MAIN_FUNCTIONW'

+1

在最終的C++ 11規範中,具有EMPTY捕獲規範的lambda可以像普通函數一樣處理並分配給函數指針。坦克爲你提供幫助。順便說一句,service main是一個類成員,所以它不會工作。 – 2012-03-01 18:39:52

回答

1

這是一個Win32 API,希望帶有一個確切的簽名的實際函數指針。您不能將lambda或其他類型的函數對象傳遞給它。

您應該將ServiceMain傳遞到服務調度表中。

+0

坦克爲您提供幫助。順便說一句,service main是一個類成員,所以它不會工作。 – 2012-03-01 20:52:08

相關問題